Refer from http://blog.csdn.net/tingsking18/article/details/5096172
- #include <QApplication>
- #include <QThread>
- #include <QMainWindow>
- #include <QProgressBar>
- #include <QPushButton>
- class RenderThread : public QThread
- {
- Q_OBJECT
- signals:
- void notify(int);
- public:
- RenderThread(QObject *parent = 0): QThread(parent)
- {
- };
- void test()
- {
- start(HighestPriority);
- };
- protected:
- void run()
- {
- int i =0;
- while (i<101)
- {
- msleep(50);
- i++;
- emit notify(i);
- }
- };
- };
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- MainWindow(QWidget *parent = 0)
- {
- resize(600, 400);
- centralWidget = new QWidget(this);
- progressBar = new QProgressBar(centralWidget);
- progressBar->setGeometry(QRect(130, 180, 321, 23));
- progressBar->setValue(0);
- pushButton = new QPushButton("test",centralWidget);
- pushButton->setGeometry(QRect(110, 100, 75, 23));
- QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(OnClicked()));
- this->setCentralWidget(centralWidget);
- };
- ~MainWindow(){};
- private:
- QProgressBar *progressBar;
- QPushButton *pushButton;
- QWidget *centralWidget;
- RenderThread render;
- public slots:
- void OnClicked()
- {
- connect(&render,SIGNAL(notify(int)),this,SLOT(OnNotify(int)));
- render.test();
- };
- void OnNotify(int i)
- {
- progressBar->setValue(i);
- };
- };
- #include "test.moc"
- int main(int argc,char* argv[])
- {
- QApplication app(argc,argv);
- MainWindow window;
- window.show();
- return app.exec();
- }