我有一个 qmainwindow,它在 qgraphicsview 中容纳了几个 qgraphicsitems(从 qgraphicsitems 继承的类)。这些项目包含他们的个人项目,这些项目也继承自 qgraphicsitems。这些项目监听鼠标按下事件。这些项目还具有自己的其他数据属性,例如自定义 ID。
我可以将鼠标事件从这些项目传递到主窗口。我还需要将上述点击项目的自定义 id 与事件一起传递给主窗口,以便主窗口可以更改其外观以适应点击项目。
我该怎么做?
我有一个 qmainwindow,它在 qgraphicsview 中容纳了几个 qgraphicsitems(从 qgraphicsitems 继承的类)。这些项目包含他们的个人项目,这些项目也继承自 qgraphicsitems。这些项目监听鼠标按下事件。这些项目还具有自己的其他数据属性,例如自定义 ID。
我可以将鼠标事件从这些项目传递到主窗口。我还需要将上述点击项目的自定义 id 与事件一起传递给主窗口,以便主窗口可以更改其外观以适应点击项目。
我该怎么做?
也许我没有得到你的问题,但我会使用 SLOTS 和 SIGNALS 而不是事件。例如,在 QGraphicsScene 上放置一个信号,类似于:
void myItemClicked(int custom_id);
因此,当您的项目捕获鼠标事件时,它们可以执行以下操作:
emit scene()->myItemClicked(my_id);
MainWindow 可以将来自场景的信号连接到它的插槽之一,并根据信号中出现的项目的 id 更改其属性。
否则,如果您允许项目调用 QMainWindow 的方法(这是一种设计选择),您可以在(例如)场景中存储指向它的指针,因此项目可以执行以下操作:
scene()->mainwindow->aMethod();