相关文章推荐
无邪的大熊猫  ·  linux opencv 静态编译 ...·  1 月前    · 
腼腆的滑板  ·  sum string sql group ...·  1 年前    · 
另类的单车  ·  Open3D C++ 学习(1)安装·  1 年前    · 

Qt程序中报错 QObject::connect: Cannot queue arguments of type 'QVector<int>' (Make sure 'QVector<int>' is registered using qRegisterMetaType().

原因是因为在线程间 QVector<int>没有注册。

在代码中加入

qRegisterMetaType<QVector<int>>("QVector<int>");

再次编译,即可。

Q Object 调用moveToThread( QT hread *targetThread)后, 运行targetThread.start(),此后Q Object 的事件将在targetThread中处理。 比如:Q Object 的槽函数,将在targetThread中处理。 出现问题背景:当一个带参数为自定义结构体PortConfig的信号发送至另一个线程的槽时, connect (this,SIGNAL(SignalOpenPort(PortConfig)),m_pMySerialPortCom,SLOT(OpenPort(PortConfig))); 编译 时不会出错,但信号出发时出现错误提示: Q Object :: connect : Cannot queue ar... 注册自定义类型 信号和槽在不同线程中传自定义参数时,需要注册。否则就会 报错 : Q Object :: connect : Cannot queue arguments of type ‘QVector’ (Make sure ‘QVector’ is registered using qRegisterMeta Type ().) 注册格式: qRegisterMeta Type <MyClass>("MyClass"); #include "widget.h" #include <QAppli Q Object :: connect : Cannot queue arguments of type ‘QVector’ (Make sure ‘QVector’ is registered using qRegisterMeta Type ().) qRegisterMeta Type 未注册 QVector 解决方法: #include <QMeta Type > qRegisterMeta Type <QVector<int>>("QVector<int>"); 最近刚开始学py qt 5,搜索后才知道只能在UI线程里绘制界面,不能在子线程里绘制- -,遇到了坑,记录下这个过程 代码是创建子线程调用fun_1,fun_1会修改list,等线程执行完后再将list里的元素添加到TableWidget里 list=[...] def fun_1(i): #change list class fun2Thread( Qt Core.Q... 注意,不是在定义类型,或者定义结构体的地方进行注册,而是在所需要用到的类的构造函数中进行注册,比如我的一个自定义类,需要用到自定义的结构体做信号参数,就在他的构造函数中注册一下。在 qt 日常使用中,信号与槽机制是绝对不可或缺且常用的,其中的参数一般都会比较简单,bool、int、QString之类的,但当我们想要传递相对比较复杂的参数,例如。原因大概就是信号槽的参数不支持你自定义的类型,只能识别 QT 库中最基本的类型参数,所以需要对自定义类型进行注册。注册完就不会 报错 ,能够正常使用了。 I have a small problem concerning two threads and signals/slots connect ed between them. My connect looks like this. Qt 开发 中,在尝试触发某个信号时程序崩溃, 发现 报错 提示Q Object :: connect : Cannot queue arguments of type 'xxx'(Make sure 'xxx' is registered using qRegisterMeta Type ().)。 Q Object :: connect : Cannot queue arguments of type 'QList<quint16>' (Make sure 'QList<quint16>' is registered using qRegisterMeta Type ().) QList<quint16>类型没有被注册,只需要注册一下就解决了。 解决方法: 在 报错 信息中找到 报错 的哪一行,在之前加上下面 Q Object :: connect : Cannot queue arguments of type 'QList<quint16>' (Make sure 'QList<quint16>' is registered using qRegisterMeta Type ().) 这个是由于,在主线程中开启另一个线程,这两个线程之间需要进行信息的交互。但是QList<quint16>l类型没有被注册,只要你注册一下就解决了。 解决方法: 今天线程传值中传容器发现子线程给主线程发信号的时候 报错 了,出现Q Object :: connect : Cannot queue arguments of type '******',该信息通过注册类型来解决容器传输 报错 的问题。 本文作者原创,转载请附上文章出处与本文链接。 在使用槽函数过程中出现以下 报错 只有加入了Q_ OBJECT ,你。为了使用信号和槽,就必须继承Q_ OBJECT .凡是Q Object 类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_ OBJECT 。不管是不是使用信号槽,都应该添加这个宏。这个宏的展开将为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI的反射能力。因此,如果你觉得你的类不需要使用信号槽,就不添加这个宏,就是错误的。其它很多操作都会依赖于这个宏。...