一、使用信号和槽传递自定义结构体

这是一个老问题了,但是每次使用都要bing,因此做个笔记整理下。
一共有三种方法,可以让结构体在信号和槽之间传递。前两种方法可以让结构体在线程之间传递,最后一种方法只能在同一线程中传递。
Q_DECLARE_METATYPE
qRegisterMetaType(推荐
直接传递

二、Q_DECLARE_METATYPE

需要宏Q_DECLARE_METATYPE和QVariant配合使用,首先使用宏Q_DECLARE_METATYPE将自定义结构以注册到metatype系统中,这样就能将自定义结构体包装成QVariant,然后在信号和槽之间通过传递QVariant,这样就能间接的传递自定义的结构体。
使用步骤如下:

1 使用Q_DECLARE_METATYPE注册自定义结构体
#include <QMetaType>
typedef  struct People{int age;QString name;
}People;
Q_DECLARE_METATYPE(People);
2 将自定义结构体添加到QVariant

【Qt】信号和槽传递自定义结构体相关推荐

  1. Qt信号与槽传递自定义数据类型——两种解决方法

    Qt信号与槽传递自定义数据类型--两种解决方法 参考文章: (1)Qt信号与槽传递自定义数据类型--两种解决方法 (2)https://www.cnblogs.com/tid-think/p/9300 ...

  2. Qt信号与槽传递QList动态数组

    Qt信号与槽传递QList动态数组 根据实验,测试程序见下: - QString的QList动态数组能够通过signal-slot机制进行传递: - 自定义结构的QList动态数组也能通过signal ...

  3. QT信号与槽(自定义带参数的信号)

    关于QT信号与槽的问题其实每个初学QT的人都会遇到,当时我需要做一个带界面的demo,在信号和槽的问题上,我需要的想法是让槽可以有参数的进行操作,但是系统内置的clicked()信号是不含参数的,这对 ...

  4. Qt中的QByteArray和自定义结构体之间的相互转换

    在Qt项目开发中,经常会碰到自定义结构体和字符数组之间的转换问题,不妨假设结构体名字为custom_struct, 字符数组名字为array_data 1. QByteArray转换为自定义结构体 c ...

  5. Qt工作笔记-QByteArray与自定义结构体之间的转化(可用于网络传输,以及数据回调)

    目录 理论 程序 理论 在Socket中,数据一般是char型(一般情况下,其实最好是用uchar来传输,避免莫名其妙的错误,但用char也是可以的),而在Qt里面可以使用QByteArray,这个在 ...

  6. Qt中解决信号和槽不能使用自定义结构体的问题

    在Qt中信号和槽使用自定义的结构时,运行的时候发现报错不能识别结构体 解决办法: 一定要将自定义结构体定义为typedef struct 使用Q_DECLARE_METATYPE(结构体名),将结构体 ...

  7. Qt线程间信号槽传递自定义数据类型(qRegisterMetaType的使用)

    Qt线程间信号槽传递自定义数据类型(qRegisterMetaType的使用) #include <QMetaType> CFileDataModel::CFileDataModel(QO ...

  8. Qt信号和槽函数连接不成功原因

    Qt信号和槽连接失败原因主要有以下几点: 1.槽函数并没有声明在类的public slots(或private slots或protected slots)里,因此,所想要成为槽函数的那个函数只是普普 ...

  9. QML < 5 > QML 访问C++ 类 (函数Q_INVOKABLE、枚举Q_ENUMS 、成员变量Q_PROPERTY、自定义结构体QVariantMap、List数据QVariantL

    QML < 5 > QML 访问C++ 类 (函数Q_INVOKABLE.枚举Q_ENUMS .成员变量Q_PROPERTY.自定义结构体(QVariantMap ).List数据QVar ...

最新文章

  1. RxAndroid/java小记
  2. python语言程序设计基础网课-宜昌2020年_高校邦_Python程序设计基础【实境编程】...
  3. 目录创建 android,创建目录浏览器  |  Android 开发者  |  Android Developers
  4. Python_sqlalchemy之多对多建表
  5. Python的Tkinter点击按钮触发事件
  6. 使用阿里云Python SDK管理ECS安全组
  7. 《D3.js数据可视化实战手册》—— 1.1 简介
  8. try、catch、finally 和 throw-C#异常处理
  9. iis开启php验证码,php结合GD库实现中文验证码的简单方法
  10. /bin/bash^M: bad interpreter: No such file or directory
  11. 【华为云技术分享】《跟唐老师学习云网络》 - Kubernetes网络实现
  12. promise catchfinally
  13. 优化器:torch.optim
  14. Visual Studio Code 使用Git进行版本控制
  15. Uber柳甄:Uber中国独立核算 谋求国内A股上市
  16. Android库和项目收集-图片
  17. python文件操作的几种方法with open,r,w,b
  18. 电影《Green book》观后感_已补全:携带着种族歧视的“光环”,艰难地获得朋友的相互依赖,依然得享受生活的酸甜苦咸。...
  19. SiTime硅晶振MEMS谐振子制作工艺详解
  20. Java-Collection集合之单列集合List,以及遍历方式

热门文章

  1. NetworkManagementService介绍
  2. Linux那些事儿 之 戏说USB(10)模型,又见模型
  3. 三维点云语义分割总览
  4. 原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
  5. 设置IDEA编辑过程直接通过F5刷新网页就可以实时查看JSP文件更新结果,而非通过重新run
  6. GSG灰猩猩插件合集包
  7. Blender 和Unreal Engine中的模块化3D建筑技能学习视频教程
  8. 洛谷P1057 传球游戏(记忆化搜索)
  9. 小米4手机在DDMS下获取data/data目录权限
  10. adobe就不敢把融合做得更好一点?