这里是我的问题QT继承信号将不会达到插槽
class Base : QThread
{
Q_OBJECT
virtual void run() = 0;
signals:
void Ping(int);
};
class Derived : public Base
{
void run()
{
emit Ping(42);
}
}
的代码信号(42)将不会到达/来电插槽。怎么了? 在此先感谢。
这里是我的问题QT继承信号将不会达到插槽
class Base : QThread
{
Q_OBJECT
virtual void run() = 0;
signals:
void Ping(int);
};
class Derived : public Base
{
void run()
{
emit Ping(42);
}
}
的代码信号(42)将不会到达/来电插槽。怎么了? 在此先感谢。
做了100次,它确实有效。你确定你的基类是正确的MOC? (即在包含在.pro
的HEADERS部分中的文件中定义)。当连接你的信号时,检查QObject::connect
(它是一个布尔值)的返回状态。一个好的做法是类似的东西
bool r=false;
r=QObject::connect(pObj1,SIGNAL(signalStuff()),pObj2,SLOT(gotStuff()));
Q_ASSERT(r);
随着莉斯发现,如果事情在你的connect
出了问题,你可以检查的痕迹就知道发生了什么。
我还可以注意到:
run
,它已经通过QThreadQThread
定义:基类和派生类属于线程而不是在新创建的线程;
编辑:
编辑,以兼顾Liz的有趣评论。
我认为你试图从不同的线程连接信号和插槽。 你读过this article吗?
我遇到了同样的问题,但设法找到解决办法。在我的情况下,问题不是继承(即使我从派生类发出)。
问题是代码调用发射信号被执行之前代码连接信号插槽。因此,两个信号都被发射出来,信号插槽连接正常工作,但插槽中的代码没有执行,因为在将插槽连接到信号之前发生了发射。
也许这对未来有帮助。
(不值得一个单独的答案)检查你的程序的输出。如果连接调用有问题,Qt会将错误转储到控制台窗口。有时候就像打字错误一样简单。 – Liz 2011-06-06 22:06:02
该死的真的,编辑我的文章,以考虑到这一点,thx利兹 – Bruce 2011-06-07 05:22:34