Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未接收到来自QRunnable的Qt信号/未连接 我正在用C++编写QT应用程序。我有一个QRunnable在QThreadPool中运行,它向主线程发送一个信号。问题是,连接不起作用:主线程从未接收到信号,尽管我已经验证了执行emit的代码确实被调用了。这是我的密码:_Qt_Signals_Slot - Fatal编程技术网

未接收到来自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(),看看这是否可行)。