QT C++实现多线程通信--示例代码

来源:互联网 发布:linux which命令 编辑:程序博客网 时间:2024/06/11 21:57
</pre><p></p><pre name="code" class="cpp">先看测试代码:
main.cpp
#include "mainwindow.h"#include <QApplication>//#include<mythreaad.h>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.show(); //   mythreaad my; //   my.start();  //  QObject::connect(&my,SIGNAL(MySignal(QString)),&w,SLOT(myreceiveslots(QString))); //   QObject::connect(&w,SIGNAL(mainSignal(int)),&my,SLOT(mythreadrec(int)));    return a.exec();}



mainWindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include<qthread.h>#include<mythreaad.h>//#include<data.h>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();    void generateData();signals:    void mainSignal(mydataTrans);private:    mythreaad *tre;    Ui::MainWindow *ui;mydataTrans *mydata;};#endif // MAINWINDOW_H



#include "mainwindow.h"#include "ui_mainwindow.h"#include<qmessagebox.h>#include<qdebug.h>#include<string>MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    tre=new mythreaad();    tre->start();QObject::connect(this, SIGNAL(mainSignal(mydataTrans)), tre, SLOT(mythreadrec(mydataTrans)));//    QObject::connect(tre,SIGNAL(MySignal(int )),this,SLOT(MainRecei(int)));this->generateData();   // this->moveToThread(tre);}MainWindow::~MainWindow(){    delete ui;}void MainWindow::generateData(){mydata = new mydataTrans();mydata->id = 9;  mydata->name = "chenshuyi ";//mydata->age = 26;emit(mainSignal(*mydata));   }


#ifndef MYTHREAAD_H#define MYTHREAAD_H#include<qthread.h>#include<qstring.h>#include"mydataTrans.h"class mythreaad:public QThread{    Q_OBJECTpublic:    mythreaad();    void run();    int handleInt(int);signals:   void MySignal(int );public slots:   void mythreadrec(mydataTrans);public:mydataTrans mydata2;};#endif // MYTHREAAD_H

#include "mythreaad.h"#include"qstring.h"#include<qdebug.h>mythreaad::mythreaad(){}void mythreaad::run(){//   qDebug()<<"thread running";//  exec();}void mythreaad::mythreadrec(mydataTrans  mydata1){  qDebug()<<"hello wolrd\n";  qDebug() << QString::number(mydata1.id);  qDebug() << QString::fromStdString(mydata1.name);//  qDebug() << QString::number(mydata1.age);  system("pause");//   num=handleInt(num);//   emit(MySignal(num));}int mythreaad::handleInt(int num){    return num*2;}


#pragma once#include<string>using namespace std;class mydataTrans{public:mydataTrans();~mydataTrans();int id;string name;};



#include "mydataTrans.h"mydataTrans::mydataTrans(){}mydataTrans::~mydataTrans(){}



分别是主线程类,子线程类,要求处理的数据类型类,主线程传出数据类型类给子线程进行相应处理,相同的办法,子线程也可以把传出结果传给主线程显示(这部分代码不给出)。



0 0