2014-06-27 29 views
1

這可能是一個轉儲問題,但我現在真的堅持下去。我試圖在QGraphicsScene中繪製一些方塊,我希望它們從位置x = 0對齊到x座標的正位置。但是,它們根據QGraphicsView的對齊配置進行對齊,並且位置設置僅對第二項和第一項相對於第一項有效!這意味着如果我有一個單一的項目,那麼它的位置設置不起作用。主要是這條線似乎並沒有被工作:Qt - 添加項目到絕對位置的QGraphicsScene

graphicsView->setAlignment(Qt::AlignAbsolute); 

這是我的代碼:

QGraphicsScene *scene = new QGraphicsScene(); 
QGraphicsView *graphicsView; 
graphicsView->setScene(scene); 
graphicsView->setAlignment(Qt::AlignAbsolute); 

for(int i = 0; i < 500; i+= 50) 
{ 
    QGraphicsPolygonItem *item = new QGraphicsPolygonItem(); 

    item->setPen(QPen(QColor(qrand()%255,qrand()%255,qrand()%255))); 
    item->setBrush(QBrush(QColor(255,251,253))); 
    item->setPolygon(*myPolygon); 
    graphicsView->scene()->addItem(item); 
    item->setPos(i , 40); 
    item->setFlag(QGraphicsItem::ItemIsMovable, true); 
    item->setFlag(QGraphicsItem::ItemIsSelectable, true); 
    graphicsView->show(); 
} 

我不知道這個問題可能是什麼,所以我嘗試下面的代碼

const QRectF rect = QRectF(0, 0, ui->graphicsView->width(), ui->graphicsView->height()); 
ui->graphicsView->setScene(&_scene); 
ui->graphicsView->fitInView(rect, Qt::KeepAspectRatio); 
ui->graphicsView->setSceneRect(rect); 

對於前四行,以下輸出不會產生彼此接近的大小:

qDebug() << "scene =>" << _scene.width() << _scene.height(); 
qDebug() << "graphicview =>" << ui->graphicsView->width() << ui->graphicsView->height(); 

我非常感謝您的幫助。

回答

2

看來Qt::AlignAbsolute不會做你認爲它做的事情。你實際需要的是Qt::AlignLeft | Qt::AlignTop

在此解釋: http://qt-project.org/doc/qt-4.8/qgraphicsview.html#alignment-prop http://qt-project.org/doc/qt-4.8/qt.html#AlignmentFlag-enum

在我的代碼,我只用graphicsView->setSceneRect(rect);而不是fitInView()。後者引入了縮放並可能會阻礙你對錯誤發生的理解。

基本上,我覆蓋的QGraphicsView重新實現resizeEvent()

void AutohideView::resizeEvent(QResizeEvent *event) 
{ 
    /* always resize the scene accordingly */ 
    if (scene()) 
     scene()->setSceneRect(QRect(QPoint(0, 0), event->size())); 

    QGraphicsView::resizeEvent(event); 
} 

我不改變取向或任何其他選項,並在範圍中使用絕對座標[00 .. scene()->width()scene()->height()]當定位我的物品。

相關問題