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的反射能力。因此,如果你觉得你的类不需要使用信号槽,就不添加这个宏,就是错误的。其它很多操作都会依赖于这个宏。...