【发布时间】:2021-05-07 20:58:14
【问题描述】:
是否存在一个简单的方法来选择 QGraphicsItem 的一部分(例如选择,例如带有虚线边框),尽管它在 QGraphicsScene 中的位置
我找到了QGraphicsItem::ItemIsSelectable,但对我帮助不大。
谢谢
【问题讨论】:
标签: qt selection qgraphicsitem
是否存在一个简单的方法来选择 QGraphicsItem 的一部分(例如选择,例如带有虚线边框),尽管它在 QGraphicsScene 中的位置
我找到了QGraphicsItem::ItemIsSelectable,但对我帮助不大。
谢谢
【问题讨论】:
标签: qt selection qgraphicsitem
您不能选择 QGraphicsItem 的一部分。您可以选择整个项目。通常它会在被选中时在自身周围绘制一个虚线矩形。
您可以通过以下方式选择项目:
QGraphicsItem::setSelected
或
QGraphicsScene::setSelectionArea
【讨论】:
您想在单击它时选择它吗?如果是,您可以覆盖此项目的mousePressEvent(QGraphicsSceneMouseEvent event) 侦听器,并使用setSelected()。在 Java 中(对不起),它会是这样的:
@Override
public void mousePressEvent (QGraphicsSceneMouseEvent event) {
if (event.button() == Qt.MouseButton.LeftButton) {
this.setSelected(true);
}
}
当然,如果你想用左键选择它。 :)
【讨论】:
您可以调用QGraphicsScene::setSelectionArea(QPainter path, QTransform),然后通过调用 selectionArea 检索该区域。但是,如果您想检索当前选择的项目,您将只获得整个 QGraphicsItems。
【讨论】:
这里是一个如何使用ItemIsSelectable的例子:
QGraphicsRectItem* item = new QGraphicsRectItem(rect);
item->setFlag(QGraphicsItem::ItemIsSelectable);
graphicsScene->addItem(item);
然后您可以将selectionChanged 信号连接到插槽:
connect(graphicsScene, &QGraphicsScene::selectionChanged, this, &MyWidget::itemClicked);
请注意,selectionChanged 仅在双击时触发,而不是在单击时触发。
【讨论】: