使用 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 中的事件将项目属性传递到主窗口的主要内容,如果未能解决你的问题,请参考以下文章