qt继承的信号不会到达插槽

sit*_*eal 1 inheritance qt multithreading signals-slots

这是我的问题的代码

class Base : QThread  
{
   Q_OBJECT  
 virtual void run() = 0;  
signals:  
 void Ping(int);  
};  

class Derived : public Base  
{  
  void run()  
  {  
    emit Ping(42);  
  }  
}  
Run Code Online (Sandbox Code Playgroud)

信号(42)不会到达/呼叫插槽.怎么了?提前致谢.

Bru*_*uce 5

这样做了100次,确实有效.你确定你的基类是正确的MOC吗?(即在HEADERS部分中包含的文件中定义.pro)同样在连接信号时,检查返回状态QObject::connect(它是一个布尔值).一个好的做法是这样的

bool r=false;
r=QObject::connect(pObj1,SIGNAL(signalStuff()),pObj2,SLOT(gotStuff()));
Q_ASSERT(r);
Run Code Online (Sandbox Code Playgroud)

正如Liz所注意到的,如果你的问题出了问题connect,你可以检查一下痕迹,知道发生了什么.

我还可以注意到:

  • 您不必run在基类中重新定义,它已由QThread定义
  • 常见的陷阱QThread:基类和派生类属于创建它们的线程,而不是新创建的线程
  • 你没有将你的信号连接到你的样本中的任何插槽,所以它不会触发任何东西(我想它已在其他地方完成)
  • 你的班级Derived缺少决赛 ;

编辑:

编辑考虑到liz'有趣的评论.