0

我正在使用一个 QGraphincsView,它包含几个从 QGraphicsItem 继承的元素。整个事情都很好,我可以根据需要选择它们。当我按住 Ctrl 键时,我可以选择其中的几个。

现在我想实现一个可选的多选而不需要按住 Ctrl 键。我已经尝试通过调用在鼠标按下事件中设置相关修饰符

evt->setModifiers(Qt::ControlModifier);

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

所以我的问题是:在不按住键的情况下,必须做些什么才能获得默认的多项选择功能?

谢谢!

4

1 回答 1

2

这由 QGraphicsScene 控制。你说:-

我正在使用一个 QGraphincsView ,它包含几个从 QGraphicsItem 继承的元素

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

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

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

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

于 2014-12-05T09:00:53.643 回答