不同类别的 2 个对象之间的信号/插槽
Posted
技术标签:
【中文标题】不同类别的 2 个对象之间的信号/插槽【英文标题】:Signal/slot between 2 objects of different classes 【发布时间】:2017-04-03 09:22:43 【问题描述】:我有一个关于 Signal-Slots 的问题:
我有一个文件userinterface.cpp
,其中有 2 个类 MoveSeries
和 Chart
的 2 个对象:
MoveSeries * MOVE_SERIES ;
MOVE_SERIES = new MoveSeries( this);
和
Chart * CHART ;
CHART = new Chart ( this);
在我的userinterface.cpp
中,我有ui.Diagramm
作为Chart
类型的对象。
现在我想让Chart
与MoveSeries
通信。我可以使用userinterface.cpp
中的直接信号槽来做到这一点吗?类似的东西:
Userinterface.cpp:
.
.
.
connect( ui.Diagram , SIGNAL( send_BarValue( double val )),
MOVE_SERIES , SLOT( on_BarValueReceived (double val) )) ;
...
或者我只能在MoveSeries
Userinterface
和Chart
Userinterface
之间有信号槽吗?
谢谢!
【问题讨论】:
你试过你的解决方案了吗?如果是这样,您知道答案(是的,您可以这样做) 是的,我试过了,但是没用,所以这是我的第一个想法。现在我知道它可以工作了,看来我的参数有问题非常感谢! 是的,你可以。你甚至可以做信号到信号的连接。它对你不起作用?你能告诉我们你的代码吗?你确定 MOVE_SERIES 继承自 QObject 并定义了这个插槽吗? (对于 ui 表单,它是否定义了信号?) 尝试使用搜索框,甚至更好——阅读文档。 还要确保所有带有信号和插槽的类都具有Q_OBJECT
宏,否则将无法连接。通常连接问题(不是现有的slot等)在运行时会记录到控制台,你也可以看看。
【参考方案1】:
您的解决方案有效,但它的编写方式错误,您不能在 connect SIGNAL 或 SLOT 调用中传递值,只能传递类型。
connect(ui.Diagram , SIGNAL( send_BarValue(double)),
MOVE_SERIES ,SLOT( on_BarValueReceived (double) )) ;
但这也很糟糕,这是 Qt4 风格的连接,它可以编译和运行,但是如果你在那里输入错误的任何内容,你不会在构建时间得到错误。
更喜欢使用新的 Signal / Slot 语法:
connect( ui.Diagram , &DiagramClass::end_BarValue,
MOVE_SERIES ,&MOVE_SERIESClass::on_BarValueReceived) ;
这样连接将在编译时进行检查,从而减少您可能遇到的问题。
【讨论】:
以上是关于不同类别的 2 个对象之间的信号/插槽的主要内容,如果未能解决你的问题,请参考以下文章
Keras LSTM 网络预测所有信号属于同一类别(在 3 个不同的类别中)
Python pandas:如何在 2 个不同类别之间更改分类值