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”

posted on 2017-11-16 21:14  low蛋壳  阅读(384)  评论(0)    收藏  举报

导航