[Qt]QObject::connect: Cannot queue arguments of type 'QString&'的解决方法

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

参考:https://blog.csdn.net/tokary/article/details/5777141
遇到的问题是,在主线程和子线程中,通过信号与槽发送QString,遇到

QObject::connect: Cannot queue arguments of type 'QString&'

原博客内容是这样:

it is not allowed to pass non-const value across threads.
that means you can’t modify the argument ‘s value across threads.
★Solution: add const before argument’s type

翻译过来就是:
不允许跨线程传递非const值(应该说是非const引用,个人理解)。
解决方法就是要么是const引用,要么是值传递

个人测试过:在同一线程内非const引用,进行传递,是没有问题的。上述问题是在两个线程中,非const引用出的问题。

报错 QObject::connect: Cannot queue arguments of type 确保这种问题的核心是类型未注册为 Qt 的元类型。在代码中注册类型(使用声明模板类型。确保跨线程信号槽连接时使用的参数是 Qt 能识别的类型。通过以上步骤可以彻底解决这个问题,使在信号槽中正常传递,无论是在单线程还是多线程环境中。 阅读详情

相关推荐

QT程序报错解决方案:Cannot queue arguments of typeQTextCharFormat‘ 或 ‘QTextCursor‘

Qt 的信号槽机制在不同线程之间传递数据时,会将数据打包为事件并通过事件队列发送,这就要求所有传递的数据类型都必须是 可序列化的。为了让 Qt 能够在线程之间传递数据类型,必须使用 qRegisterMetaType() 函数将这些类型注册到 Qt 的元对象系统中。

乐亦Lee的博客 1083

Qt问题】QObject::connect: Cannot queue arguments of type ‘QVector<int>‘(Make sure ‘QVector<int>‘

qt日常使用中,信号与槽机制是绝对不可或缺且常用的,其中的参数一般都会比较简单,bool、int、原因是因为在线程间QVector没有注册。之类的,但当我们想要传递相对比较复杂的参数,例如。,以及一些我们自定义的结构体时,就会出现报错。

Fanjufei的博客 1948

QtQt再学习(十六):QObject::connect: Cannot queue arguments of type ‘QString&‘

1、问题描述 跨线程使用信号和槽时,如果是非const的引用传参,就会报如下的错误: QObject::connect: Cannot queue arguments of type 'QString&' (Make sure 'QString&' is registered using qRegisterMetaType().) 2、测试示例 #include <QCoreApplication> #include <QThread> #include <Q

郭老二 999

QObject::connect: Cannot queue arguments of type 'QString&'解决方法

[Qt]QObject::connect: Cannot queue arguments of type 'QString&'的解决方法 在主线程和子线程中,通过信号与槽发送QString,遇到 QObject::connect: Cannot queue arguments of type 'QString&'问题 错误代码: connect(this,SIGNAL(emStar...

Y_Hanxiao的博客 2813

Qt篇——QObject::connect: Cannot queue arguments of type ‘xxx‘(Make sure ‘xxx‘ is registered using qReg

Qt开发中,在尝试触发某个信号时程序崩溃, 发现报错提示QObject::connect: Cannot queue arguments of type 'xxx'(Make sure 'xxx' is registered using qRegisterMetaType().)。

u011391361的博客 2458

QObject::connect: Cannot queue arguments of type "xxx"的解决方案

问题描述 在跨线程的信号和槽的参数传递中, 参数的类型是自定义的类型, 然而此时出现了错误: QObject::connect: Cannot queue arguments of type 'Pos' (Make sure 'Pos' is registered using qRegisterMetaType().) 其中, Pos是自定义的类型: struct Pos { int x...

Erick Lv的笔记 1万+

Qt QObject::connect: Cannot queue arguments of type ‘uint16_t‘

QObject::connect: Cannot queue arguments of type 'uint16_t' (Make sure 'uint16_t' is registered using qRegisterMetaType().) 网上很多说遇到这种情况是由于数据结构是自定义类型,但uint16_t这个一般编译器已经帮我们定义好了,而且在非跨线程情况下都是可以用的。 但是我还是觉得可以尝试使用qint16来替代uint16_t试试,后来又在网站上看到别人的回答,更确定我的想法应该可以完

lxj362343的博客 1353

Qt出现QObject::connect: Cannot queue arguments of type ‘******‘的解决方法

今天线程传值中传容器发现子线程给主线程发信号的时候报错了,出现QObject::connect: Cannot queue arguments of type '******',该信息通过注册类型来解决容器传输报错的问题。 本文作者原创,转载请附上文章出处与本文链接。 原因:因为该传输类型信号没有定义,不像QString、int等等常见类型直接发信号就可以。 解决方法:定义一个该类型。 示例: mainwindow.h void colle...

断点 8170

QObject::connect: Cannot queue arguments of type 'QTextCursor'

使用PyQt5编写UI程序的时候,发现运行时会经常蹦出这句提示,经检查发现该错误出现程序写入QtextEidt组件时产生的信息。 经搜索后发现当使用QTextEdit,并使用了append方法就会出现该错误提示,原因是我们不能通过线程来修改UI,较为安全的修改用户界面的方式是向UI窗口发送信号(signal),较为简单的方式是使用 Qt threading类。 class MyThread(QtC...

时有限 7933

Qt编译报错QObject::connect: Cannot queue arguments of type ‘xxxxxx‘

Qt编译报错QObject::connect: Cannot queue arguments of type 'xxxxxx'

菜鸡正在学习 1999

Qt QObject::connect: Cannot queue arguments of type ‘your class‘】

Qt框架中,如果你需要在QObject派生类的信号(signals)或槽(slots)机制中传递自定义类型的数据,或者需要将这些数据存储在QObject的属性(properties)中,你需要确保这些类型已被注册,以便Qt的元对象系统能够识别和处理它们。函数用于注册一个自定义类型,使其可以在Qt的元对象系统中使用。这包括在跨线程的信号和槽通信中传递该类型的实例,或者在Qt属性系统中使用。如果你在代码中看到这样的提示(可能来自Qt Creator的编译器插件或静态分析工具),这意味着你的代码中使用了类型。

一起学习进步! 804

QObject::connect: Cannot queue arguments of type...【已解决

问题: Qt程序编译出现如下问题: QObject::connect: Cannot queue arguments of type 'QList<quint16>' (Make sure 'QList<quint16>' is registered using qRegisterMetaType().) 这个是由于,在主线程中开启另一个线程,这两个线程之间需要进行信息的交互。但是QList<quint16>l类型没有被注册,只要你注册一下就解决了。 解决方法

www.linuxkiss.com 你可以精通一门IT技术 1万+

Qt QObject::connect: Cannot queue arguments of type ‘***’

这个问题在win的没有太注意有没有这个问题,但是切刀Linux下,看到,那就解决了他。

DreamLife 1101

Qt编译出现QObject::connect: Cannot queue arguments of type解决方法

出现问题: Qt代码写好,在编译时候出现如下的问题: QObject::connect: Cannot queue arguments of type 'QList<quint16>' (Make sure 'QList<quint16>' is registered using qRegisterMetaType().) 原因: QList<quint16>类型没有被注册,只需要注册一下就解决了。 解决方法: 在报错信息中找到报错的哪一行,在之前加上下面

www.linuxkiss.com 你可以精通一门IT技术 5103

QObject::connect: Cannot queue arguments of type 'QList<RootNode>' (Make sure 'QList<RootNode>' is

1 开发环境 Win10(64bit) Qt5.4.2(64bit) 2 错误描述 在不同线程之间通过信号/槽来传递自定义数据类型QList<RootNode>的时候,提示错误: [plain] view plain copy 在CODE上查看代码片派生到我的代码片 QObject::connect: Cannot queue arguments of type ‘QList’ ...

it草稿纸 2509

Qt - 错误 - QObject::connect: Cannot queue arguments of type 'XXX'解决办法

出现问题背景:当一个带参数为自定义结构体PortConfig的信号发送至另一个线程的槽时, connect(this,SIGNAL(SignalOpenPort(PortConfig)),m_pMySerialPortCom,SLOT(OpenPort(PortConfig))); 编译时不会出错,但信号出发时出现错误提示: QObject::connect: Cannot queue ar...

chdcyt的博客 4587

[QT] 为解决 QObject::connect: Cannot queue arguments of type ‘XXX‘引发的问题:没有可用的复制构造函数或复制构造函数声明为“explicit”

[QT] 为解决 QObject::connect: Cannot queue arguments of type 'XXX'引发的问题:没有可用的复制构造函数或复制构造函数声明为“explicit” 缘由: 定义了一个UserInfo类,没有继承自QObject,然后因为某个线程调用的信号槽调用问题导致出现 QObject::connect: Cannot queue arguments of type 'UserInfo' ... 然后引发一系列问题。 1,最初UserInfo定义成如下.

H_O_W_E的专栏 2402

QObject::connect: Cannot queue arguments of type 'QMap<QString,QString>'

   QObject::connect: Cannot queue arguments of type 'QMap&lt;QString,QString&gt;',(Make sure 'QMap&lt;QString,QString&gt;' is registered using qRegisterMetaType().).      上述错误,只有在跨线程信号传递时才会出现.  因为Q...

specialsun的专栏 1439

Qt: QObject::connect: Cannot queue arguments of type 'XXX'

1 开发环境     Win10(64bit)     Qt5.4.2(64bit) 2 错误描述     在不同线程之间通过信号/槽来传递自定义数据类型QList的时候,提示错误: [plain] view plain copy QObject::connect: Cannot queue arguments of type 'QList'  (Make s

Lost Monkey 5235
上一篇: Windows + Qt Creator + Protobuf的编译和使用历程
下一篇: MongoDB C++库编译,windows平台+VS2015(QT中也可以用)
hp_cpp
博客等级 码龄11年 310粉丝 218原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值