Neverland_LY的博客

Neverland_LY

Qt 多线程/多窗口 参数传递

· 重要的事情放前边说

  • 只能用 信号 - 槽 机制
  • 只能用 信号 - 槽 机制
  • 只能用 信号 - 槽 机制
  • 自己定义的数据结构要另当别论
  • 自己定义的数据结构要另当别论
  • 自己定义的数据结构要另当别论
  • Qt支持的数据类型如 QString、int、double 什么的…
  • Qt支持的数据类型如 QString、int、double 什么的…
  • Qt支持的数据类型如 QString、int、double 什么的…

· 主线程 ===> 子线程(传递Qt支持的数据类型)


//主线程 MyWidget.cpp 构造函数里这么写
MYThread *thread;

//在 MyWidget.cpp 构造函数里这么写

    ···
    int i = 666;
    QString qStr("Qt");
    emit transferData(i , qStr);  //主线程发送信号,携带参数
    ···

//子线程 MyThread.h 里这么写
public:
    void getTransferData(int & );
private:
    int mInt;

//在 MyThread.cpp 文件中实现
void getTransferData(int & data1){
    ···
    mInt = data;  //子线程收到参数
    ···
}

注意事项:

1、emit 释放信号可以携带参数,参数数量任意
2、子线程可以接收 从第一个信号开始依次向后的任意多参数
3、在主线程 connect 信号和槽


· 子线程 ===> 主线程(传递Qt支持的数据类型)

和上面类似,不多说,主要就是信号和槽的机制


· 主窗口 ===> 子窗口(传递Qt支持的数据类型)

参考博文:Qt窗体之间相互传值的三种方式


· 子窗口 ===> 主窗口(传递Qt支持的数据类型)

参考博文:Qt窗体之间相互传值的三种方式


· 对于自定义的数据类型

直接举例说明,比如说我定一个经纬度数据类型 GPSData ,成员有经度、纬度、高度

第一步:定义数据类型

#ifndef GPSDATA_H
#define GPSDATA_H

//必须包含QMetaType!!!否则会出现下面错误:
//error: expected constructor, destructor, or type conversion before ‘;’ token
#include <QMetaType>  //就是这个头文件,很重要!!!
#include <QString>

class GPSData
{
public:
    GPSData();
    GPSData(QString,QString,QString,QString,QString,QString,QString);

    QString getLongitude;
    QString getLatitude;
    QString getAltitude;

private:
    QString longitude;
    QString latitude;
    QString altitude;
};

Q_DECLARE_METATYPE(GPSData) //一定要添加这个宏 !!!!很重要!!!!
//宏后面不需要加 ;  (分号)

#endif // GPSDATA_H

第二步:在 main 函数中注册该数据类型

#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;  //这就是展示的主窗口

    //注册数据类型(这句话太他妈重要了)
    qRegisterMetaType<GPSData>("GPSData");  //注册后,可以使用赋值类型
    qRegisterMetaType<GPSData>("GPSData&");  //注册后,可以使用引用类型
    //指针类型怎么使用自己去尝试一下吧

    w.show();
    return a.exec();
}

第三步:开始尽情的传参数吧

略..


· 总结

多总结,多练习,多看别人的文档
站在巨人的肩膀上很重要,但是也要学会怎么找肩膀


· 联系作者

邮箱:Neverland_LY@163.com

2018年4月14日 晚

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34719188/article/details/79945717
个人分类: C++ Qt
上一篇Qt之多线程---最好的教程,没有之一
下一篇C++ 之多线程简单教程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭