多執行緒重新整理UI, 用QThreadPool和QRunnable實現
阿新 • • 發佈:2019-02-20
執行緒池QThreadPool實現多執行緒, 訊號槽實現非同步執行緒重新整理UI控制元件
啟動效果
呼叫是沒有問題
這裡本來是想打印出執行緒ID, 不知道怎麼用
QString(QThread::currentThread()
輸出, 怎麼轉換成QString
文件結構
執行緒類
printtask.h
#ifndefPRINTTASK_H
#definePRINTTASK_H
#include<QObject>
#include<QRunnable>
classPrintTask:publicQObject,publicQRunnable
{
Q_OBJECT
signals:
voidnotify(QString);
public:
PrintTask();
~PrintTask();
protected:
voidrun();
signals:
//注意!要使用訊號,採用QObejct和QRunnable多繼承,記得QObject要放在前面
voidmySignal();
};
#endif//PRINTTASK_H
printtask.cpp
#include"printtask.h"
#include<QThread>
#include<iostream>
usingstd::cout;
usingstd::endl;
PrintTask::PrintTask()
{
}
PrintTask::~PrintTask()
{
}
//執行緒真正執行的內容
voidPrintTask::run()
{
QStringprintf;
printf=tr("PrintTaskruncalled");
//printf.append(QString(QThread::currentThread()));
//cout<<"PrintTaskrun被呼叫,呼叫執行緒ID為:"<<QThread::currentThread()<<endl;
emitnotify(printf);
}
mainwindow.h
#ifndefMAINWINDOW_H
#defineMAINWINDOW_H
#include<QMainWindow>
namespaceUi{
classMainWindow;
}
classMainWindow:publicQMainWindow
{
Q_OBJECT
publicslots:
voidnotify(QStringprint);
public:
explicitMainWindow(QWidget*parent=0);
~MainWindow();
privateslots:
voidon_pushButton_clicked();
private:
Ui::MainWindow*ui;
};
#endif//MAINWINDOW_H
mainwindow.cpp
#include"printtask.h"
#include<QThread>
#include<iostream>
usingstd::cout;
usingstd::endl;
PrintTask::PrintTask()
{
}
PrintTask::~PrintTask()
{
}
//執行緒真正執行的內容
voidPrintTask::run()
{
QStringprintf;
printf=tr("PrintTaskruncalled");
//printf.append(QString(QThread::currentThread()));
//cout<<"PrintTaskrun被呼叫,呼叫執行緒ID為:"<<QThread::currentThread()<<endl;
emitnotify(printf);
}
這裡的傳送型別可以隨便設定, int 或者 QString.