我正在使用一个 QGraphincsView,它包含几个继承自 QGraphicsItem 的元素。一切正常,我可以根据需要选择它们。当我按住 Ctrl 键时,我可以选择其中的几个。
现在我想实现一个可选的多选而不需要按住 Ctrl 键。我已经尝试通过调用在鼠标按下事件中设置相关修饰符
evt->setModifiers(Qt::ControlModifier);
在事件被移交给它的基类 QGraphicsItem 之前,但这不起作用。
所以我的问题是:要在默认情况下且不按住键的情况下获得多项选择功能,必须做什么?
谢谢!
最佳答案
这是由 QGraphicsScene 控制的。你说:-
I'm using a QGraphincsView that holds several elements which inherit from QGraphicsItem
实际情况并非如此。 QGraphicsView 是进入场景区域的窗口;它是一个 QGraphicsScene,其中包含从 QGraphicsItem 派生的项目。
您可以在文档中看到 QGraphicsScene具有selectedItems()等功能, selectionArea()和 setSelectionArea() .虽然可以使用 QGraphicsItem::setSelected 选择 QGraphicsItem ,当您单击一个项目时发生的事情的控制由 QGraphicsScene 管理,事件已从 QGraphicsView 传递。
如果继承自QGraphicsScene,则可以覆盖鼠标方法; mousePressEvent , mouseMoveEvent , mouseReleaseEvent .这将允许您监视用户何时通过单击选择连续的项目并通过调用他们的 QGraphicsItem::setSelected 函数使用react。
或者,根据您的设计,您可以允许用户在场景上绘制一个区域并调用 QGraphicsScene::setSelectionArea , 这将设置给定 QPainterPath 包围的所有项目。
关于c++ - 不按住键选择多个 QGraphicsItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27309920/