Графический интерфейс Qt завис, когда я рисовал. Я хочу показать окно сообщения «загрузка..» в это время. Я использую для этого QThread, но не могу этого сделать.
мой класс 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:
Archive::Archive(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Archive)
{
ui->setupUi(this);
mess=new myThread(this);
connect(mess, SIGNAL(threadSignal()), this, SLOT(threadSlot()));
box.setWindowFlags(Qt::WindowStaysOnTopHint);
}
void Archive::threadSlot()
{
box.show();
}
В моем основном файле cpp есть функция, которая замораживает графический интерфейс.
void Archive::plot()
{
mess->start();
//heavy work. It takes 2-3 second and GUI become unresponsive.
}
Я хочу, чтобы этот поток начинался первым и показывал QmessageBox. после завершения функции plot() QmessageBox исчез. Но с этим кодом QmessageBox показывает после завершения функции plot(). Почему это так себя ведет?
Я использую Qt 4.8.5
Спасибо.
myThread
, если вся тяжелая работа выполняется в основном потоке? - person thuga   schedule 21.11.2013myThread
и оставить материал GUI в своем основном потоке, а не наоборот. - person thuga   schedule 21.11.2013