我在QGraphicsScene
中遇到QGrahicsRectItem
的問題。我想要的是能夠用鼠標移動項目。但問題是,在我的情況下,拖動的矩形比項目本身更大。使用QGrahicsRectItem拖動比項目本身大的矩形
這裏是我使用的代碼:
class Test: public QGraphicsView
{
public:
Test();
private:
virtual void resizeEvent (QResizeEvent * event);
QGraphicsScene* m_pScene;
};
Test::Test()
{
m_pScene = new QGraphicsScene();
setScene(m_pScene);
m_pScene->setSceneRect(0, 0, 100, 100);
for (int i = 0 ; i < 10 ; i++)
{
QGraphicsRectItem * pItem = new QGraphicsRectItem();
pItem->setFlag(QGraphicsItem::ItemIsMovable);
pItem->setBrush(QBrush(QColor(190, 100, 100)));
pItem->setRect(QRectF(10*i, 10, 5, 80.f));
pItem->setCursor(Qt::SizeAllCursor);
m_pScene->addItem(pItem);
}
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
resize(600, 200);
fitInView(scene()->sceneRect());
show();
}
void Test::resizeEvent(QResizeEvent * event)
{
QGraphicsView::resizeEvent(event);
fitInView(scene()->sceneRect());
}
所以,當我跑我的程序我有這個窗口,我可以將項目。一切似乎都OK。
但是,如果我仔細看拖動區比項目本身更大。 (請參閱以下屏幕截圖上的藍色矩形)藍色矩形表示如果我在此矩形中移動鼠標,則光標會更改,並且我可以拖動該項目。
我有一個問題涉及到的感覺「fitInView(場景() - > sceneRect());」行。如果我刪除它,那麼它的工作。 例如,如果我添加一個'scale(5,1)',就有同樣的問題。
你有什麼問題的想法?
如果將KeepAspectRatio添加到fitInView調用中,會發生什麼情況?它是否仍然有錯誤的拖拽?它看起來像轉換後的paint rect和drag rect在某種程度上不同步。 – 2011-03-28 12:57:28