私はC++でQtアプリケーションを書いています。QThreadPoolでQRunnableを実行していて、メインスレッドにシグナルを送信します。問題は、接続が機能しないことです。emitを実行するコードが実際に呼び出されていることを確認したにもかかわらず、メインスレッドがシグナルを受信することはありません。これが私のコードです:
私の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の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();を使用せずに試しましたが、成功しませんでした。