捕捉QGraphicsScene的selectionChanged()信号

3

我正在尝试捕捉指示用户使用橡皮筋选择区域的信号。我尝试了以下方法:

  QGraphicsScene* scene = new QGraphicsScene();

  connect(scene, SIGNAL(selectionChanged()), this, SLOT(SelectionChanged()));
  this->graphicsView->setScene(scene);
  this->graphicsView->setDragMode(QGraphicsView::RubberBandDrag);

但是我的SelectionChanged()槽从未被调用。有什么办法能够解决这个问题吗?
2个回答

1
为了使得每当在场景中选择某些项时发出selectionChanged信号。为了被选中,应该已经设置标志QGraphicsItem::ItemIsSelectable
你确定这些项是可选择的吗?

当前场景中实际上没有任何项。根据文档 http://doc.qt.nokia.com/latest/qgraphicsscene.html#selectionChanged ,当“选择区域设置”时,它似乎也会被触发,我以为橡皮筋正在执行这个操作? - David Doria
selectionChanged() 信号表示您场景中的 QGraphicsItem 的选择状态已更改。如果用户没有使用橡皮筋选择任何项,则选择未更改,因此不会发出信号。 - Chris
好的,那么问题就变成了“我该如何捕捉与使用/释放GraphicsView相关联的橡皮筋事件?” - David Doria

1

如@webclectic答案的评论中所指出的,QGraphicsView橡皮筋是用于选择QGraphicsItems的。

要获取橡皮筋的坐标,您需要继承QGraphicsView,然后按照QRubberBand手册页面上的说明,在鼠标按下和释放时存储坐标,然后触发一个带有点的QRect的信号。


1
对于未来的读者,我在这里实现了它:http://programmingexamples.net/wiki/Qt/Images/RubberBandSignal - David Doria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接