qRegisterMetaType的使用
来源:互联网 发布:sqlserver 索引维护 编辑:程序博客网 时间:2024/06/01 23:27
如果是自己定义的类型如果想使用signal/slot来传递的话,则没有这么简单。直接使用的话,会产生下面这种错误:
QObject::connect: Cannot queue arguments of type 'TextAndNumber' (Make sure 'TextAndNumber' is registed using qRegisterMetaType().)
原因:当一个signal被放到队列中(queued)时,它的参数(arguments)也会被一起一起放到队列中(queued起来),这就意味着参数在被传送到slot之前需要被拷贝、存储在队列中(queue)中;为了能够在队列中存储这些参数(argument),Qt需要去construct、destruct、copy这些对象,而为了让Qt知道怎样去作这些事情,参数的类型需要使用qRegisterMetaType来注册(如错误提示中的说明)
步骤:(以自定义TextAndNumber类型为例)
自定一种类型,在这个类型的顶部包含:#include <QMetaType>
在类型定义完成后,加入声明:Q_DECLARE_METATYPE(TextAndNumber);
在main()函数中注册这种类型:qRegisterMetaType<TextAndNumber>("TextAndNumber");
如果还希望使用这种类型的引用,可同样要注册:qRegisterMetaType<TextAndNumber>("TextAndNumber&");
#include <QMetaType>
//必须包含QMetaType,否则会出现下面错误:
//error: expected constructor, destructor, or type conversion before ‘;’ token
#include <QString>
class TextAndNumber {
public:
TextAndNumber();
TextAndNumber(int, QString);
int count();
QString text();
private:
int m_count;
QString m_text;
};
Q_DECLARE_METATYPE(TextAndNumber);
#endif // TEXTANDNUMBER_H
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qRegisterMetaType<TextAndNumber>("TextAndNumber");
qRegisterMetaType<TextAndNumber>("TextAndNumber&");
TextDevice device;
TextThread foo("foo"), bar("bar");
QObject::connect(&foo, SIGNAL(writeText(TextAndNumber&)), &device, SLOT(write(TextAndNumber&)));
QObject::connect(&bar, SIGNAL(writeText(TextAndNumber&)), &device, SLOT(write(TextAndNumber&)));
- qRegisterMetaType的使用
- qRegisterMetaType的使用
- qRegisterMetaType的使用
- Qt 线程间共享数据(qRegisterMetaType的使用)
- Qt 线程间信号槽传递自定义数据类型(qRegisterMetaType的使用)
- 线程中通过信号和槽函数传递信息的时候,由于用到了自己定义的参数结构,所以使用qRegisterMetaType
- using qRegisterMetaType()
- Q_DECLARE_METATYPE与qRegisterMetaType学习
- Q_DECLARE_METATYPE与qRegisterMetaType学习
- Q_DECLARE_METATYPE与qRegisterMetaType学习
- Q_DECLARE_METATYPE与qRegisterMetaType
- Q_DECLARE_METATYPE与qRegisterMetaType学习
- 元类型之qRegisterMetaType
- qRegisterMetaType用法总结
- Q_DECLARE_METATYPE与qRegisterMetaType学习(转自:http://hi.baidu.com/cyclone/blog/item/01108bd40599b00fa18)
- GUID使用的使用
- ${}的使用
- 的使用
- JavaScript的this机制与箭头函数(二)——箭头函数中的this
- 参数传递之指针传递
- 百度UEditor富文本编辑器去除自动追加span标签
- 青蛙跳台阶问题
- c语言(结构体)---实现学生信息输入,输出,查询
- qRegisterMetaType的使用
- 盘点HR日常工作数据计算大全
- 用什么打开DWG文件进行查看呢
- 11.10 JavaScript基础2
- Denied starting an intent without a user gesture
- 使用Feign实现声明式Restful风格调用
- web环境安装相关
- 网络字节顺序NBO(Network Byte Order)和主机字节顺序(HBO,Host Byte Order)转换
- 遇到的浏览器兼容问题