【发布时间】:2014-05-01 00:06:06
【问题描述】:
我对@987654324@ 中的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());
}
所以当我运行我的程序时,我有这个窗口,我可以拖动项目。一切似乎都很好。
但如果我仔细观察,拖动区域比项目本身大。 (见下图蓝色矩形)蓝色矩形表示如果我在这个矩形中移动鼠标,光标会改变,我可以拖动项目。
我感觉问题与“fitInView(scene()->sceneRect());”有关线。如果我删除它,那么它可以工作。 例如,如果我添加一个“scale(5,1)”,就会出现同样的问题。
你知道问题可能是什么吗?
【问题讨论】:
-
如果将 KeepAspectRatio 添加到 fitInView 调用中会发生什么?它仍然有错误的拖动矩形吗?看起来绘画矩形和拖动矩形在转换后不知何故不同步。
标签: qt draggable qgraphicsview qgraphicsitem