选择多个QGraphicsItem而不按住键

时间:2014-12-05 06:15:53

标签: c++ qt qt5 qt5.2

我使用的QGraphincsView包含几个继承自QGraphicsItem的元素。整个工作正常,我可以根据需要选择它们。当我按住Ctrl键时,我可以选择其中几个。

现在我想要实现一个可选的多选,而无需按住Ctrl键。我已经尝试通过调用

在mouse-press-event中设置相关修饰符
evt->setModifiers(Qt::ControlModifier);

在事件被移交给它的基类QGraphicsItem之前,但这不起作用。

所以我的问题是:默认情况下如何获取多项选择功能并且不按住某个键需要做什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是由QGraphicsScene控制的。你说: -

  

我使用的QGraphincsView包含几个从QGraphicsItem继承的元素

事实并非如此。 QGraphicsView是进入场景区域的窗口;它是一个QGraphicsScene,它包含从QGraphicsItem派生的项目。

您可以在文档中看到QGraphicsScene具有selectedItems()selectionArea()setSelectionArea()等功能。虽然可以使用QGraphicsItem::setSelected选择QGraphicsItem,但是单击项目时所发生的事情的控制权由QGraphicsScene控制,事件已从QGraphicsView传递。

如果从QGraphicsScene继承,则可以覆盖鼠标方法; mousePressEventmouseMoveEventmouseReleaseEvent。这将允许您监视用户何时通过单击选择连续项目并通过调用其QGraphicsItem :: setSelected函数进行响应。

或者,根据您的设计,您可以允许用户在场景上绘制一个区域并调用QGraphicsScene::setSelectionArea,这将设置由给定QPainterPath包围的所有项目。