1.一個主界面(主線程),一個次線程,次線程通過信號向主線程傳遞遞增變量,主線程將它顯示出來
mythread.h
#include <QThread>
#include <QDebug>
class Mythread : public QThread
{
Q_OBJECT
public:
Mythread();
protected:
void run();
private:
int i;
signals:
void signal_add_int(QString);
};mythread.cpp
#include "mythread.h"
#include <QDebug>
Mythread::Mythread()
{
i = 0;
}
void Mythread::run()
{
while(1)
{
i++;
QString str = QString::number(i,10);
emit signal_add_int(str);
sleep(1);
qDebug()<<"run thread:" <<QThread::currentThreadId();
}
}
mainwindow.h
#include <QMainWindow>
#include "mythread.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
Mythread thread;
private slots:
void set_lineEdit_text(QString);
void start_thread();
};mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&thread,SIGNAL(signal_add_int(QString)),this,SLOT(set_lineEdit_text(QString)),Qt::QueuedConnection);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(start_thread()));
qDebug()<<"MainWindow:" <<QThread::currentThreadId();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::set_lineEdit_text(QString str)
{
ui->lineEdit->setText(str);
qDebug()<<"from thread slot:" <<QThread::currentThreadId();
}
void MainWindow::start_thread()
{
thread.start();
}打印結果:
MainWindow: 3062654672 from thread slot: 3062654672 run thread: 3017550736 from thread slot: 3062654672 run thread: 3017550736 from thread slot: 3062654672 run thread: 3017550736 from thread slot: 3062654672
結論:
主線程運行thread.start()後,次線程啓動,進入到次線程中,
次線程發送信號給主線程,主線程接收到該信號,進入槽函數,該槽函數也在主線程中運行。
次線程的開始和結束都在run函數中開始和結束