Qt c++ 信号槽不能正常工作

Posted

技术标签:

【中文标题】Qt c++ 信号槽不能正常工作【英文标题】:Qt c++ signal slots does not work properly 【发布时间】:2016-10-24 14:24:28 【问题描述】:

我的代码有一个奇怪的行为:

我想设置一个信号槽连接。当我没有任何参数时,它可以正常工作。但是当我使用像 int 这样简单的参数时,我的连接不起作用。 有人知道为什么会这样吗?

谢谢。

这行得通:

Chart.h       
  void signalForUI();

Chart.cpp
    emit signalForUI();

Userinterface.h   
    public slots:
      void UI_schreibtWas();

 Userinterface.cpp   

     connect(  ui.Diagram  , SIGNAL( signalForUI()  ),
               this  ,SLOT (UI_schreibtWas()))  ;
  ...

       void UserInterface::UI_schreibtWas()
         qDebug() << "ich schreibe was- ohne ";    

这不是:

Chart.h       
  void signalForUI(const int &X_send);

Chart.cpp
    emit signalForUI(5);        

Userinterface.h   
    public slots:
      void UI_schreibtWas(const int &X_send);

 Userinterface.cpp   

     connect(  ui.Diagram  , SIGNAL( signalForUI(const int &X_send)  ),
               this  ,SLOT (UI_schreibtWas(const int &X_send)))  ;
  ...

      void UserInterface::UI_schreibtWas(const int &X_send)
        qDebug() << "ich schreibe was  - int ";    

【问题讨论】:

删除连接中的X_send。只需使用参数类型。 所以把connect( ui.Diagram , SIGNAL( signalForUI(const int &amp;X_send) ), this ,SLOT (UI_schreibtWas(const int &amp;X_send)))变成connect( ui.Diagram , SIGNAL( signalForUI(const int &amp;) ), this ,SLOT (UI_schreibtWas(const int &amp;))) ; 【参考方案1】:

您不应该将参数名称传递到connect 的信号/槽定义中。

connect(ui.Diagram, SIGNAL(signalForUI(const int&)),
        this, SLOT(UI_schreibtWas(const int&)));

但是你应该使用 Qt 5 的语法来连接,它不使用宏并且允许你在编译时捕获这样的错误:

connect(ui.Diagram, &DiagramClass::signalForUI, this, &ThisClass::UI_schreibtWas)

DiagramClassThisClass 替换为适当的类名。

【讨论】:

以上是关于Qt c++ 信号槽不能正常工作的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何在 qt 中释放信号槽?

Qt C++ 信号和槽没有触发

C++框架编程Qt 的 信号与槽 简单了解!

Qt c++ 比很多信号槽更好的方法

Qt基础面试题

qt信号和槽机制的问题