1

我有一个 qmainwindow,它在 qgraphicsview 中容纳了几个 qgraphicsitems(从 qgraphicsitems 继承的类)。这些项目包含他们的个人项目,这些项目也继承自 qgraphicsitems。这些项目监听鼠标按下事件。这些项目还具有自己的其他数据属性,例如自定义 ID。

我可以将鼠标事件从这些项目传递到主窗口。我还需要将上述点击项目的自定义 id 与事件一起传递给主窗口,以便主窗口可以更改其外观以适应点击项目。

我该怎么做?

4

1 回答 1

1

也许我没有得到你的问题,但我会使用 SLOTS 和 SIGNALS 而不是事件。例如,在 QGraphicsScene 上放置一个信号,类似于:

void myItemClicked(int custom_id);

因此,当您的项目捕获鼠标事件时,它们可以执行以下操作:

emit scene()->myItemClicked(my_id);

MainWindow 可以将来自场景的信号连接到它的插槽之一,并根据信号中出现的项目的 id 更改其属性。

否则,如果您允许项目调用 QMainWindow 的方法(这是一种设计选择),您可以在(例如)场景中存储指向它的指针,因此项目可以执行以下操作:

scene()->mainwindow->aMethod();
于 2012-03-21T10:57:39.430 回答