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

现在,我想实现一个可选的多重选择,而无需按住Ctrl键。我已经尝试通过调用来在mouse-press-event中设置相关修饰符

evt->setModifiers(Qt::ControlModifier);


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

所以我的问题是:在默认情况下且无需按住键才能获得多重选择功能,该怎么做?

谢谢!

最佳答案

这由QGraphicsScene控制。您说:-


  我正在使用一个QGraphincsView,其中包含几个继承自QGraphicsItem的元素


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

您可以在文档中看到QGraphicsScene具有诸如selectedItems()selectionArea()setSelectionArea()之类的功能。虽然可以使用QGraphicsItem::setSelected选择QGraphicsItem,但是单击项目时由QGraphicsScene控制对事件的控制,并且事件是从QGraphicsView传递的。

如果您继承自QGraphicsScene,则可以重写鼠标方法;否则,请参见图5。 mousePressEventmouseMoveEventmouseReleaseEvent。这将使您可以监视用户何时单击连续的项目,并通过调用其QGraphicsItem :: setSelected函数进行响应。

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

关于c++ - 选择多个QGraphicsItem而不按住键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27309920/

10-11 15:41