这是我的问题代码
class Base : QThread
{
Q_OBJECT
virtual void run() = 0;
signals:
void Ping(int);
};
class Derived : public Base
{
void run()
{
emit Ping(42);
}
}
信号(42)不会到达/呼叫插槽。怎么了? 提前谢谢。
答案 0 :(得分:5)
这样做了100次,确实有效。你确定你的基类是正确的MOC吗? (即在.pro
的HEADERS部分中包含的文件中定义)同样在连接信号时,检查QObject::connect
的返回状态(它是布尔值)。一个好的做法是那样的
bool r=false;
r=QObject::connect(pObj1,SIGNAL(signalStuff()),pObj2,SLOT(gotStuff()));
Q_ASSERT(r);
正如Liz所注意到的,如果connect
出现问题,你可以查看踪迹,了解发生了什么。
我还可以注意到:
run
,它已由QThread QThread
的常见缺陷:基类和派生类属于创建它们的线程,而不是新创建的线程;
修改强>:
编辑以考虑liz'有趣的评论。
答案 1 :(得分:0)
我认为你正试图从不同的线程连接信号和插槽。 你看过this article吗?
答案 2 :(得分:0)
我遇到了同样的问题,但设法找到解决方案。在我的情况下问题不是继承(即使我从派生类发出)。
问题是代码调用发射信号是在连接信号与插槽的代码之前执行的。因此,两个信号都被发出,信号槽连接工作正常,但是插槽中的代码没有被执行,因为在将插槽连接到信号之前发生了发射。
也许这有助于将来。