我正在用C++編寫Qt應用程序。我有一個在QThreadPool中運行的QRunnable,它發送一個信號給主線程。問題是,連接不起作用:主線程永遠不會收到信號,即使我已經驗證了執行發射的代碼確實被調用了。這裏是我的代碼:Qt來自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插槽實現上有一個斷點,並且該函數永遠不會被調用。
我在做什麼錯?
UPDATE:
我OfflineAnalysisThread ::運行的定義()函數:
void OfflineAnalysisThread::run()
{
std::string myMsg("This is my message");
sendMessage(myMsg);
QApplication::exec();
}
我自己也嘗試沒有的QApplication :: EXEC();,沒有成功。
向我們展示您對OfflineAnalysisThread :: run()的定義。從你寫的內容來看,這聽起來不對。你不應該在run()中調用'QApplication :: exec()'。 – 2013-03-02 20:45:36
我剛剛用我的run()的定義更新了我的帖子。請看一下。另外我也嘗試過沒有exec()(事實上,這是我的原始代碼,我添加了exec()以查看這是否可行)。 – 2013-03-02 21:30:03