【问题标题】:Signal/slot between 2 objects of different classes不同类别的 2 个对象之间的信号/插槽
【发布时间】:2017-04-03 09:22:43
【问题描述】:

我有一个关于 Signal-Slots 的问题:

我有一个文件userinterface.cpp,其中有 2 个类 MoveSeriesChart 的 2 个对象:

MoveSeries * MOVE_SERIES  ;
MOVE_SERIES = new MoveSeries( this);

Chart * CHART  ;
CHART  = new Chart ( this);

在我的userinterface.cpp 中,我有ui.Diagramm 作为Chart 类型的对象。

现在我想让ChartMoveSeries 通信。我可以使用userinterface.cpp 中的直接信号槽来做到这一点吗?类似的东西

 Userinterface.cpp:
   .
   .
   .
    connect(   ui.Diagram   , SIGNAL( send_BarValue( double val   )),
               MOVE_SERIES  , SLOT( on_BarValueReceived (double val) )) ;

   ...

或者我只能在MoveSeries UserinterfaceChart Userinterface 之间有信号槽吗?

谢谢!

【问题讨论】:

  • 你试过你的解决方案了吗?如果是这样,您知道答案(是的,您可以这样做)
  • 是的,我试过了,但是没用,所以这是我的第一个想法。现在我知道它可以工作了,看来我的参数有问题非常感谢!
  • 是的,你可以。你甚至可以做信号到信号的连接。它对你不起作用?你能告诉我们你的代码吗?你确定 MOVE_SERIES 继承自 QObject 并定义了这个插槽吗? (对于 ui 表单,它是否定义了信号?)
  • 尝试使用搜索框,甚至更好——阅读文档。
  • 还要确保所有带有信号和插槽的类都具有Q_OBJECT 宏,否则将无法连接。通常连接问题(不是现有的slot等)在运行时会记录到控制台,你也可以看看。

标签: c++ qt signals-slots


【解决方案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) ;

这样连接将在编译时进行检查,从而减少您可能遇到的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多