我使用的QGraphincsView包含几个继承自QGraphicsItem的元素。整个工作正常,我可以根据需要选择它们。当我按住Ctrl键时,我可以选择其中几个。
现在我想要实现一个可选的多选,而无需按住Ctrl键。我已经尝试通过调用
在mouse-press-event中设置相关修饰符evt->setModifiers(Qt::ControlModifier);
在事件被移交给它的基类QGraphicsItem之前,但这不起作用。
所以我的问题是:默认情况下如何获取多项选择功能并且不按住某个键需要做什么?
谢谢!
答案 0 :(得分:1)
这是由QGraphicsScene控制的。你说: -
我使用的QGraphincsView包含几个从QGraphicsItem继承的元素
事实并非如此。 QGraphicsView是进入场景区域的窗口;它是一个QGraphicsScene,它包含从QGraphicsItem派生的项目。
您可以在文档中看到QGraphicsScene具有selectedItems(),selectionArea()和setSelectionArea()等功能。虽然可以使用QGraphicsItem::setSelected选择QGraphicsItem,但是单击项目时所发生的事情的控制权由QGraphicsScene控制,事件已从QGraphicsView传递。
如果从QGraphicsScene继承,则可以覆盖鼠标方法; mousePressEvent,mouseMoveEvent,mouseReleaseEvent。这将允许您监视用户何时通过单击选择连续项目并通过调用其QGraphicsItem :: setSelected函数进行响应。
或者,根据您的设计,您可以允许用户在场景上绘制一个区域并调用QGraphicsScene::setSelectionArea,这将设置由给定QPainterPath包围的所有项目。