Qt 信号和槽函数参数只能是基于 Qt 的基础类型的,比如 QString、int、bool 等,如果想传递自定义类型默认情况下是行不通的。要想在 Qt 的信号和槽函数之间传递自定义类型,可以先将自己的自定义类型注册一下,使用如下代码:
1 | Q_DECLARE_METATYPE(nim::DocTransInfo) |
nim::DocTransInfo
为你的自定义数据结构,我这里是一个结构体。当需要传递这个数据时,不是直接使用,而是用 QVariant
来包装一下,信号和槽函数则直接使用 QVariant
类型的数据作为参数传递。首先我们连接信号和槽:
1 | connect(this, SIGNAL(AddDocItemSignalNew(QVariant)), this, SLOT(AddDocItemNew(QVariant)), Qt::QueuedConnection); |
信号和槽函数的声明如下:
1 | signals: |
1 | private slots: |
当要发起信号的时候,把我们要传递的这个数据包装到 QVariant 中,然后传递给信号函数就可以了。如下所示:
1 | QVariant data; |
槽函数接受到信号时可以像如下方法一样解析参数出来使用:
1 | void MainForm::AddDocItemNew(QVariant variant) |
这样包装后,我们就可以使用 Qt 的信号和槽功能来传递自定义数据结构了。