當我做了一些繪圖工作時,Qt GUI被凍結。我想在此時顯示「正在加載..」消息框。我使用QThread,但我做不到。當GUI凍結時顯示帶QThread的QMessageBox
我的QThread類
myThread.cpp
#include "myThread.h"
#include <QtCore>
myThread::myThread(QObject *parent) :
QThread(parent)
{
}
void myThread::run()
{
emit threadSignal();
}
myThread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
class myThread : public QThread
{
Q_OBJECT
public:
explicit myThread(QObject *parent = 0);
void run();
signals:
void threadSignal();
public slots:
};
我在主頭文件
public:
myThread *mess;
QMessageBox box;
public slots:
void threadSlot();
我在主寫道寫cpp文件:
在我的主要cpp文件中有一個凍結GUI的功能。
void Archive::plot()
{
mess->start();
//heavy work. It takes 2-3 second and GUI become unresponsive.
}
我想那個線程首先啓動並顯示QmessageBox。 plot()函數結束後,QmessageBox消失。但是在plot()函數結束後顯示QmessageBox。爲什麼它的行爲如此呢?
我使用Qt 4.8.5
謝謝。
如果所有繁重的工作都在主線程上完成,你的'myThread'對象的目的是什麼? – thuga
我只想顯示一個帶有文本「Wait」的QMessageBox。如果我在主線程中執行此操作,QmessageBox在GUI凍結前不會出現。 – user4757345
然後,您應該將繁重的工作移至您的'myThread'對象,並將GUI內容保留在主線程中,而不是反過來。 – thuga