为什么QGraphicsItem :: ItemIsMovable无效?

时间:2014-11-18 09:15:29

标签: qt

我只想将可移动标签添加到场景中:

QGraphicsWidget* w = scene->addWidget( new QLabel( "Test Label" ) );
w->setFlag( QGraphicsItem::ItemIsMovable, true );

但标签仍然无法移动。

1 个答案:

答案 0 :(得分:2)

如果该项目未设置为可选项,则也无法移动该项目。

w->setFlag(QGraphicsItem::ItemIsSelectable, true);

此外,当您向场景添加小部件时,小部件嵌入在QGraphicsProxyWidget中。正如documentation所述: -

  

它在两个对象之间转发事件,并在QWidget的基于整数的几何和QGraphicsWidget的基于qreal的几何体之间进行转换。

因此,通常由QGraphicsItem处理的鼠标事件将传播到窗口小部件,而这并不知道它在代理窗口小部件中。为了在场景中拖动窗口小部件,您需要更改它,以便QGraphicsProxyWidget处理事件。

一种方法是从QGraphicsProxyWidget派生并覆盖mouseMoveEvent,mousePressEvent和mouseReleaseEvent。然后检测是否单击并释放鼠标而不拖动,在这种情况下将事件传播到窗口小部件,否则如果检测到鼠标已在移动事件中移动,而不调用mouseReleaseEvent,则相应地移动代理窗口小部件,使用QEvent::accept()

将事件设置为已接受