【问题标题】:Select multiple QGraphicsItems without holding down key选择多个QGraphicsItems而不按住键
【发布时间】:2014-12-05 17:00:53
【问题描述】:

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

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

evt->setModifiers(Qt::ControlModifier);

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

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

谢谢!

【问题讨论】:

    标签: c++ qt qt5 qt5.2


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      相关资源
      最近更新 更多