QT开发中自定义参数的qRegisterMetaType注册

文章讲述了在Qt中,遇到PositionInfo类型参数未注册导致的QObject::connect错误,解决方案是使用qRegisterMetaType进行元类型注册。主要讲解了信号与槽机制和connect函数的用法,以及如何确保信号和槽的正确关联。
摘要由CSDN通过智能技术生成

Qt中的类库有接近一半是从基类QObject上继承下来,信号与反应槽(signals/slot)机制就是用来在QObject类或其子类间通讯的方法(connect),当自定义参数如果出现如下错误提示的时候,表示你的参数可能没有进行注册:

QObject::connect: Cannot queue arguments of type 'PositionInfo'
(Make sure 'PositionInfo' is registered using qRegisterMetaType().)

解决方法:

在窗口程序中直接把写上如下代码即可(参数替换成自己的)

qRegisterMetaType<PositionInfo>("PositionInfo");

函数说明:

信号与槽的关联

通过调用 QObject 对象的 connect 函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。该函数的定义如下:

bool QObject::connect ( const QObject * sender, const char * signal,
   const QObject * receiver, const char * member ) [static]

这个函数的作用就是将发射者 sender 对象中的信号 signal 与接收者 receiver 中的 member 槽函数联系起来。当指定信号 signal 时必须使用 QT 的宏 SIGNAL(),当指定槽函数时必须使用宏 SLOT()。如果发射者与接收者属于同一个对象的话,那么在 connect 调用中接收者参数可以省略

Qt,如果要在信号槽使用自定义类型,需要使用qRegisterMetaType自定义类型进行注册注册自定义类型的方法如下: 1. 在代码包含<QMetaType>头文件。 2. 在需要注册类型的位置调用qRegisterMetaType<MyType>()函数,其MyType是你自定义类型的名称。 3. 如果你需要注册自定义类型的引用类型,可以使用qRegisterMetaType<MyType>("MyType&")。 一般来说,在你的类的构造函数进行类型注册是一个好的选择,这样可以确保在使用跨线程的信号槽之前已经注册自定义类型。这样就能避免在使用自定义类型进行信号槽通信时出现错误。同时,确保在注册类型之前已经包含了<QMetaType>头文件。 总结起来,注册自定义类型的步骤如下: 1. 在需要注册类型的位置包含<QMetaType>头文件。 2. 在合适的位置调用qRegisterMetaType<MyType>()函数进行类型注册。 3. 如果有需要,还可以注册自定义类型的引用类型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [qRegisterMetaType-Qt注册定义类型](https://blog.csdn.net/lizhichao410/article/details/123109358)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Qt注册自定义类型](https://blog.csdn.net/locahuang/article/details/110221959)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驽马匠人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值