【轉】Qt多執行緒操作介面---在QThread更新QProgressBar

Dsp Tian發表於2017-09-23
複製程式碼
#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();
}
複製程式碼

http://blog.csdn.net/tingsking18/article/details/5096172

相關文章