我正在用 C++ 编写一个 Qt 应用程序。我有一个在 QThreadPool 中运行的 QRunnable,它向主线程发送一个信号。问题是,连接不起作用:主线程永远不会收到信号,即使我已经验证了确实调用了发出的代码。这是我的代码:
我的 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);
};
实例化新 QRunnables 并启动它们的代码:
void OfflineAnalysisMain::myFunction()
{
OfflineAnalysisThread *newTask = new OfflineAnalysisThread();
QObject::connect(newTask, SIGNAL(threadMessageCallback(QString &)), this, SLOT(threadMsg(QString &)));
QThreadPool::globalInstance()->start(newTask);
}
因此,从我的 QRunnable 的运行函数中,我调用 sendMessage,然后执行 QApplication::exec()。我在 OfflineAnalysisMain.cpp 中的 threadMsg 插槽实现上有一个断点,并且该函数从未被调用。
我究竟做错了什么?
更新:
我的 OfflineAnalysisThread::run() 函数的定义:
void OfflineAnalysisThread::run()
{
std::string myMsg("This is my message");
sendMessage(myMsg);
QApplication::exec();
}
我也尝试过不使用 QApplication::exec();,但没有成功。