不同类的2个对象之间的信号/槽

时间:2017-04-03 09:22:43

标签: c++ qt signals-slots

我有一个关于信号槽的问题:

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

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

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

在我的userinterface.cppui.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

谢谢!

1 个答案:

答案 0 :(得分:3)

您的解决方案有效,但是以错误的方式编写,您无法在连接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) ;

这样就可以对连接进行编译时检查,从而减少可能遇到的问题数量。