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

标签 qt inheritance signals-slots multithreading

这是我的问题的代码

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

class Derived : public Base  
{  
  void run()  
  {  
    emit Ping(42);  
  }  
}  

signal(42)将无法到达/调用插槽。怎么了?
提前致谢。

最佳答案

做了100次,它确实起作用。您确定您的基类正确进行了MOC吗? (即在.pro的HEADERS部分中包含的文件中定义)。此外,在连接信号时,请检查QObject::connect的返回状态(这是一个 bool 值)。好的做法是这样的

bool r=false;
r=QObject::connect(pObj1,SIGNAL(signalStuff()),pObj2,SLOT(gotStuff()));
Q_ASSERT(r);

正如Liz所注意到的,如果connect中出了点问题,您可以检查跟踪以了解发生了什么。

我还可以注意:
  • 您不必在基类中重新定义run,它已经由QThread
  • 定义
  • QThread的共同陷阱:基类和派生类属于创建它们的线程,而不是在新创建的线程
  • 您没有将信号连接到样本中的任何插槽,因此它不会触发任何操作(我想这是在其他地方完成的)
  • 您的派生类缺少最终的;

  • 编辑:

    编辑以考虑到liz的有趣评论。

    关于qt - qt继承的信号不会到达插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6247703/

    相关文章:

    c++ - 连接不同关系的信号和槽

    Python PyQt 信号并不总是有效

    c++ - 我想在空 tableWidget 中添加带有文本的新项目

    c++ - 使用从 B 继承的具体函数实现从 A 继承的虚函数

    c++ - 在类中初始化QHash

    c# - 基类数组到派生类数组的转换

    objective-c - 在子类中更改 ivar 的类(到派生类)

    c++ - QDialogBu​​ttonBox 按钮没有响应

    c++ - Qt 将子项添加到 QGraphicsScene 中的 QGraphicsItem 派生不显示

    c++ - 遍历 QTreeWidget 节点