我正在用C++编写一个Qt应用程序。我有一个在QThreadPool中运行的QRunnable,并向主线程发送信号。问题是连接不起作用:即使我已经验证了发出发射信号的代码确实被调用,但主线程从未接收到该信号。以下是我的代码:
我的QRunnable类:
调用类(主线程):
实例化新的QRunnable并启动它们的代码:
所以,从我的QRunnable的run函数中,我调用sendMessage,然后执行QApplication::exec()。我在OfflineAnalysisMain.cpp文件中的threadMsg槽函数实现上设置了断点,但该函数从未被调用。
我做错了什么?
更新:
我的OfflineAnalysisThread::run()函数的定义:
我的QRunnable类:
class OfflineAnalysisThread : public QObject, public QRunnable
{
Q_OBJECT
public:
void run();
void sendMessage(QString &qmsg)
{
emit threadMessageCallback(qmsg);
}
signals:
void threadMessageCallback(QString &string);
};
调用类(主线程):
class OfflineAnalysisMain : public QObject
{
Q_OBJECT
public:
(...)
public slots:
void threadMsg(QString &string);
};
实例化新的QRunnable并启动它们的代码:
void OfflineAnalysisMain::myFunction()
{
OfflineAnalysisThread *newTask = new OfflineAnalysisThread();
QObject::connect(newTask, SIGNAL(threadMessageCallback(QString &)), this, SLOT(threadMsg(QString &)));
QThreadPool::globalInstance()->start(newTask);
}
所以,从我的QRunnable的run函数中,我调用sendMessage,然后执行QApplication::exec()。我在OfflineAnalysisMain.cpp文件中的threadMsg槽函数实现上设置了断点,但该函数从未被调用。
我做错了什么?
更新:
我的OfflineAnalysisThread::run()函数的定义:
void OfflineAnalysisThread::run()
{
std::string myMsg("This is my message");
sendMessage(myMsg);
QApplication::exec();
}
我也尝试了不使用 QApplication::exec(),但没有成功。
OfflineAnalysisThread::run()
的定义。从你写的内容来看,似乎不太对。你不应该在run()
中调用QApplication::exec()
。 - RA.