未接收到来自QRunnable的Qt信号/未连接 我正在用C++编写QT应用程序。我有一个QRunnable在QThreadPool中运行,它向主线程发送一个信号。问题是,连接不起作用:主线程从未接收到信号,尽管我已经验证了执行emit的代码确实被调用了。这是我的密码:
我的班:未接收到来自QRunnable的Qt信号/未连接 我正在用C++编写QT应用程序。我有一个QRunnable在QThreadPool中运行,它向主线程发送一个信号。问题是,连接不起作用:主线程从未接收到信号,尽管我已经验证了执行emit的代码确实被调用了。这是我的密码:,qt,signals,slot,Qt,Signals,Slot,我的班: class OfflineAnalysisThread : public QObject, public QRunnable { Q_OBJECT public: void run(); void sendMessage(QString &qmsg) { emit threadMessageCallback(qmsg); } signals: void threadMessageCallback(QString &string); }; 和调用类(主线程)
class OfflineAnalysisThread : public QObject, public QRunnable
{
Q_OBJECT
public:
void run();
void sendMessage(QString &qmsg)
{
emit threadMessageCallback(qmsg);
}
signals:
void threadMessageCallback(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的run函数中,我调用sendMessage,然后执行QApplication::exec()。我在OfflineAnalysisMain.cpp中的threadMsg插槽实现上有一个断点,该函数从未被调用
我做错了什么
更新:
my OfflineAnalysistThread::run()函数的定义:
void OfflineAnalysisThread::run()
{
std::string myMsg("This is my message");
sendMessage(myMsg);
QApplication::exec();
}
#include <QApplication>
#include <QMetaType>
#include <offlineanalysismain.h>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
qRegisterMetaType<QString>("QString&");
OfflineAnalysisMain* main = new OfflineAnalysisMain;
main->myFunction();
return app.exec();
}
我也尝试过不使用QApplication::exec();,没有成功。从
run()
中删除对QApplication::exec()
的调用。理想情况下,可以从main
函数中调用此函数
为了让代码正常工作,我必须编写以下main
函数:
void OfflineAnalysisThread::run()
{
std::string myMsg("This is my message");
sendMessage(myMsg);
QApplication::exec();
}
#include <QApplication>
#include <QMetaType>
#include <offlineanalysismain.h>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
qRegisterMetaType<QString>("QString&");
OfflineAnalysisMain* main = new OfflineAnalysisMain;
main->myFunction();
return app.exec();
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
QApplication应用程序(argc、argv);
qRegisterMetaType(“QString&”);
OfflineAnalysisMain*main=新的OfflineAnalysisMain;
main->myFunction();
返回app.exec();
}
请注意对
qRegisterMetaType
的调用,该调用允许Qt通过跨越线程边界的信号插槽连接传递QString
。显示您对OfflineAnalysistThread::run()的定义。从你写的来看,听起来不太对。你不应该从run()
中调用QApplication::exec()
。我刚刚用run()的定义更新了我的帖子。请看一看。此外,我也尝试过不使用exec()(事实上,这是我的原始代码,我添加了exec(),看看这是否可行)。