【问题标题】:QGraphicsItem selectionQGraphicsItem 选择
【发布时间】:2021-05-07 20:58:14
【问题描述】:

是否存在一个简单的方法来选择 QGraphicsItem 的一部分(例如选择,例如带有虚线边框),尽管它在 QGraphicsScene 中的位置

我找到了QGraphicsItem::ItemIsSelectable,但对我帮助不大。

谢谢

【问题讨论】:

    标签: qt selection qgraphicsitem


    【解决方案1】:

    您不能选择 QGraphicsItem 的一部分。您可以选择整个项目。通常它会在被选中时在自身周围绘制一个虚线矩形。

    您可以通过以下方式选择项目:

    QGraphicsItem::setSelected
    

    QGraphicsScene::setSelectionArea
    

    【讨论】:

      【解决方案2】:

      您想在单击它时选择它吗?如果是,您可以覆盖此项目的mousePressEvent(QGraphicsSceneMouseEvent event) 侦听器,并使用setSelected()。在 Java 中(对不起),它会是这样的:

      @Override
      public void mousePressEvent (QGraphicsSceneMouseEvent event) {
          if (event.button() == Qt.MouseButton.LeftButton) {
              this.setSelected(true);
          }
      }
      

      当然,如果你想用左键选择它。 :)

      【讨论】:

        【解决方案3】:

        您可以调用QGraphicsScene::setSelectionArea(QPainter path, QTransform),然后通过调用 selectionArea 检索该区域。但是,如果您想检索当前选择的项目,您将只获得整个 QGraphicsItems。

        【讨论】:

          【解决方案4】:

          这里是一个如何使用ItemIsSelectable的例子:

          QGraphicsRectItem* item = new QGraphicsRectItem(rect);
          item->setFlag(QGraphicsItem::ItemIsSelectable);
          graphicsScene->addItem(item);
          

          然后您可以将selectionChanged 信号连接到插槽:

          connect(graphicsScene, &QGraphicsScene::selectionChanged, this, &MyWidget::itemClicked);
          

          请注意,selectionChanged 仅在双击时触发,而不是在单击时触发。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-08
            • 1970-01-01
            • 2012-05-04
            • 2018-10-31
            • 2019-01-30
            • 1970-01-01
            • 1970-01-01
            • 2015-08-20
            相关资源
            最近更新 更多