QT5-线程间通信-简单例子
创建一个工程,期目录结构为:
---|
|------mainwindow.h
|-----testthread.h
|-----main.cpp
|-----mainwindow.cpp
|-----testthread.cpp
信号是线程的信号,槽是UI界面的槽。
mainwindow.h代码:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include"testthread.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void OnMsgSignal(const QString& tep2);
private:
Ui::MainWindow *ui;
TestThread *t;
};
#endif // MAINWINDOW_H
==============
testthread.h代码:
#ifndef TESTTHREAD_H #define TESTTHREAD_H #include <QThread> class TestThread :public QThread { Q_OBJECT public: explicit TestThread(QObject * parent=0); void run(); signals: void MsgSignal(const QString& tep); }; #endif // TESTTHREAD_H
======================
main.cpp代码:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
======================
mainwindow.cpp代码:
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); t = new TestThread(); connect(t, SIGNAL(MsgSignal(const QString&)), this, SLOT(OnMsgSignal(const QString&))); //此处connect的第五个参数默认变成Qt::QueuedConnection t->start(); } void MainWindow::OnMsgSignal(const QString &temp2) { ui->textEdit->append(temp2);//利用ui拖拽一个testedit,测试用,名字也不用改 } MainWindow::~MainWindow() { delete ui; }
=======================
testthread.cpp代码:
#include"testthread.h" TestThread::TestThread(QObject *parent):QThread(parent) { } void TestThread::run() { QString tep("mou-mou-mou"); emit MsgSignal(tep); }
代码可运行:结果为 窗口中央文本框内显示“mou-mou-mou”
浙公网安备 33010602011771号