【发布时间】:2013-08-05 10:59:43
【问题描述】:
我是 Qt 和 C++ 的新手,我正在尝试制作一个运行两个子线程 threadA 和 threadB 的程序。两个线程都是在 main.cpp 中创建的,如下所示:
ThreadA threadA;
threadA.start();
ThreadB threadB;
threadB.start();
这两个线程然后独立运行。 我需要使线程A 能够调用线程B 中的方法,在进程中将数据作为参数传递。我尝试使用信号和插槽,将其添加到我的 main.cpp:
QThread::connect(&threadA, SIGNAL(mySignal(uint)),
&threadB, SLOT(mySlot(uint)));
其中 threadA::mySignal(uint) 用于:
//a.h
signals:
void mySignal(unsigned int blah);
//a.cpp
emit mySignal(42);
而threadB::mySlot(uint) 在b:
//b.h
public slots:
void mySlot(unsigned int fluff);
//b.cpp
void threadB::mySlot(unsigned int fluff)
{ doStuff(fluff); ... }
程序编译并成功运行,但我在调试日志中收到来自 QObject 的消息:
QObject::connect: No such slot QThread::mySlot(uint) in ../Project/main.cpp:42
意味着编译器正在 QThread 中查找 mySlot 而不是 threadB。 谁能告诉我这里哪里出错了?任何帮助将不胜感激,如果需要,我可以提供更多详细信息。
【问题讨论】:
-
如果我错了,请纠正我,但
QThread没有mySlot,由于某种原因,连接语句引用QThread而不是您自己的派生类。 -
是的;这就是问题所在,它在 QThread 而不是 threadB 中寻找插槽
标签: c++ multithreading qt