Qt 注册自定义数据类型提供信号和槽函数传递参数

Qt 信号和槽函数参数只能是基于 Qt 的基础类型的,比如 QString、int、bool 等,如果想传递自定义类型默认情况下是行不通的。要想在 Qt 的信号和槽函数之间传递自定义类型,可以先将自己的自定义类型注册一下,使用如下代码:

Q_DECLARE_METATYPE(nim::DocTransInfo)

nim::DocTransInfo 为你的自定义数据结构,我这里是一个结构体。当需要传递这个数据时,不是直接使用,而是用 QVariant 来包装一下,信号和槽函数则直接使用 QVariant 类型的数据作为参数传递。首先我们连接信号和槽:

connect(this, SIGNAL(AddDocItemSignalNew(QVariant)), this, SLOT(AddDocItemNew(QVariant)), Qt::QueuedConnection);

信号和槽函数的声明如下:

signals:
    void AddDocItemSignalNew(QVariant variant);
private slots:
    void AddDocItemNew(QVariant variant);

当要发起信号的时候,把我们要传递的这个数据包装到 QVariant 中,然后传递给信号函数就可以了。如下所示:

QVariant data;
data.setValue(file_info);
emit AddDocItemSignalNew(data);

槽函数接受到信号时可以像如下方法一样解析参数出来使用:

void MainForm::AddDocItemNew(QVariant variant)
{
    nim::DocTransInfo doc_info = variant.value<nim::DocTransInfo>();
    // ....... 其他代码
}

这样包装后,我们就可以使用 Qt 的信号和槽功能来传递自定义数据结构了。

Post Views: 9

相关

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏宋凯伦的技术小栈

【Node.js】一个愚蠢的Try Catch过错

  前段时间学习《深入浅出Nodejs》时,在第四章 - 异步编程中作者朴灵曾提到,异步编程的难点之一是异常处理,书中描述"尝试对异步方法进行try/catch...

2118
来自专栏有趣的Python

7-Java常用工具类-多线程

我们程序员边听音乐边写代码再挂着qq,这三个软件可以同时运行就是我们的进程在起作用。

1303
来自专栏hbbliyong

WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml

 最近开始使用WebAPI,上手很容易,然后有些疑惑   1.WebAPI默认返回什么数据类型,json还是xml?   2.怎么修改WebAPI的返回数据类型...

3208
来自专栏企鹅号快讯

十个实用MySQL函数

前言 继上一次《十个实用MySQL命令》后,今天奉上十个实用MySQL函数。下面都是一些比较常用且简单的函数,在工作中也是非常常用的。 函数 0. 显示当前时间...

1966
来自专栏我的小碗汤

golang初探与命令源码分析

就是有一个main.go的main函数里调用了另一个demo.go里的hello()函数。其中main.go和hello.go同属于main包。但是在main....

722
来自专栏码字搬砖

scrapy之ip池

备注: process_request(request, spider) 当每个request通过下载中间件时,该方法被调用。 process_re...

2932
来自专栏向治洪

android应用资源预编译,编译和打包全解析

我们知道,在一个APK文件中,除了有代码文件之外,还有很多资源文件。这些资源文件是通过Android资源打包工具aapt(Android Asset P...

60210
来自专栏云鼎实验室的专栏

Drupal CVE-2018-7600 分析及 PoC 构造

漏洞分析 Drupal 在 3 月 28 日爆出一个远程代码执行漏洞,CVE 编号 CVE-2018-7600,通过对比官方的补丁,可以得知是请求中存在 # 开...

4135
来自专栏IT杂记

Git 对象存储结构分析

Git 对象有:blob (数据块), tree (目录树), commit (提交), tag (标签)。

5394
来自专栏ShaoYL

堆和栈的区别

28110

扫码关注云+社区

领取腾讯云代金券