我想了解信號/插槽如何在GUI程序中工作。例如,如果主程序中的一個插槽獲取信號,它是否會創建另一個線程來處理該插槽?信號是否創建新線程?
mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void finished_result(int);
private:
Ui::MainWindow *ui;
QThread* thread;
Worker* worker;
private slots:
void run_click();
};
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),ui(new Ui::MainWindow){
ui->setupUi(this);
}
MainWindow::~MainWindow(){
delete ui;
}
void MainWindow::run_click(){
thread = new QThread;
Worker* worker = new Worker();
worker->moveToThread(thread);
connect(worker,SIGNAL(task_finished(int)),this,SLOT(finished_result(int)));
// all other necessary signal/slot connections
thread->start();
// do more stuff
}
void MainWindow::finished_result(int x){
// do some stuff
}
在一個程序,這樣,說「做更多的東西」需要一段時間來處理和工人之前完成工作run_click()
退貨。所以當task_finished(int)
發射時,run_click()
仍然會運行。請問finished_result(int)
立即啓動還是等待run_click()
完成?請問finished_result(int)
與run_click()
在一個新的線程中啓動?
我的特別問題是我在我的「做更多的東西」持有該線程一段時間不相關QWaitCondition
。我希望我的finished_result(int)
繼續前進,無需等待run_click()
完成。任何想法如何繼續?我是否需要在新線程中向另一名工作人員「做更多的事情」?
是否可以移動「做更多的東西」到它自己的工作線程?這樣,'QWaitCondition'仍然會暫停它,直到它開始工作,但它將允許主線程立即返回到事件循環。 – RobbieE