使用 qt 中的事件将项目属性传递到主窗口

Posted

技术标签:

【中文标题】使用 qt 中的事件将项目属性传递到主窗口【英文标题】:passing item properties to main window with events in qt 【发布时间】:2012-03-21 10:18:37 【问题描述】:

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

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

我该怎么做??

【问题讨论】:

尝试发布整个 EventMonitor.h,错误在第 53 行,但我们没有看到。 谢谢,我也附上了代码 【参考方案1】:

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

void myItemClicked(int custom_id);

所以,当您的项目捕获鼠标事件时,它们可以这样做:

emit scene()->myItemClicked(my_id);

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

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

scene()->mainwindow->aMethod();

【讨论】:

是否可以从项目中发出 QMainWindow 的信号?? 为此,您应该将引用或指向 QMainWindow 的指针存储在项目可以获取它并触发其信号的地方 编译器不允许我传递主窗口的引用,这是我最初的方法失败了...... 没有什么可以阻止您这样做,也许您应该向我们展示代码

以上是关于使用 qt 中的事件将项目属性传递到主窗口的主要内容,如果未能解决你的问题,请参考以下文章

QT中UI主窗口如何与子线程相互传递参数

模型对话框移动到主窗口后面的 Qt 错误

如何通过 Qt 项目文件将命令的输出作为编译器标志传递?

如何在Qt中将点击事件传递给下面的兄弟?

如何在多个uiwindows之间传递事件

如何将修改后的图像从工具窗口传递到主窗口?