例如以C++标准库中string做参数,则会出现:
QObject::connect: Cannot queue arguments of type 'string'
(Make sure 'string' is registed using qRegisterMetaType().)
解决方案:
可以再main中加入:
qRegisterMetaType<string>("string");注册该类型
信号槽传递非Qt库类型参数时,出现QObject::connect: Cannot queue arguments of type 'QUuid'(Make sure 'string' is regi
例如以C++标准库中string做参数,则会出现:QObject::connect: Cannot queue arguments of type 'string'(Make sure 'string' is registed using qRegisterMetaType().)解决方案:可以再main中加入:qRegisterMetaType("string")
QObject
调用moveToThread(
QT
hread *targetThread)后,
运行targetThread.start(),此后
QObject
的事件将在targetThread中处理。
比如:
QObject
的
槽
函数,将在targetThread中处理。
信号
槽
传递
非
Qt
库
类型
参数
时
,
出现
QObject
::
connect
:
Cannot
queue
arguments
of
type
'string'
(
Make
sure
'string'
is
regi
...
例如以C++标准
库
中string做
参数
,则会
出现
:
QObject
::
connect
:
Cannot
queue
arguments
of
type
'string'
今天线程传值中传容器发现子线程给主线程发
信号
的
时
候报错了,
出现
QObject
::
connect
:
Cannot
queue
arguments
of
type
'******',该信息通过注册
类型
来解决容器传输报错的问题。
本文作者原创,转载请附上文章出处与本文链接。
简介在QML的Listview中插入数据
时
报这样的错误(应该是插入数据
时
候的线程不在主线程造成的)
QObject
::
connect
:
Cannot
queue
arguments
of
type
'QQmlChangeSet'
(
Make
sure
'QQmlChangeSet' is
regi
stered using q
Regi
sterMeta
Type
().)
解决办法1:用事件把插入动作放到主
QObject
::
connect
:
Cannot
queue
arguments
of
type
'QQmlChangeSet' (
Make
sure
'QQmlChangeSet' is
regi
stered using q
Regi
sterMeta
Type
()
二、问题发生的前因
我在 boost 回调函数中使用了 beginInsertRows 这类更新 Tablevi...
1、问题描述
跨线程使用
信号
和
槽
时
,如果是
非
const的引用传参,就会报如下的错误:
QObject
::
connect
:
Cannot
queue
arguments
of
type
'QString&'
(
Make
sure
'QString&' is
regi
stered using q
Regi
sterMeta
Type
().)
2、测试示例
#include <QCoreApplication>
#include <
QT
hread>
#include <Q
[
Qt
]
QObject
::
connect
:
Cannot
queue
arguments
of
type
'QString&'的解决方法
在主线程和子线程中,通过
信号
与
槽
发送QString,遇到
QObject
::
connect
:
Cannot
queue
arguments
of
type
'QString&'问题
错误代码:
connect
(this,SIGNAL(emStar...
QObject
::
connect
:
Cannot
queue
arguments
of
type
'QList<quint16>'
(
Make
sure
'QList<quint16>' is
regi
stered using q
Regi
sterMeta
Type
().)
QList<quint16>
类型
没有被注册,只需要注册一下就解决了。
解决方法:
在报错信息中找到报错的哪一行,在之前加上下面
QObject
::
connect
:
Cannot
queue
arguments
of
type
‘QVector’ (
Make
sure
‘QVector’ is
regi
stered using q
Regi
sterMeta
Type
().)
q
Regi
sterMeta
Type
未注册 QVector
解决方法:
#include <QMeta
Type
>
q
Regi
sterMeta
Type
<QVector<int>>("QVector<int>");
QObject
::
connect
:
Cannot
queue
arguments
of
type
'QMap<QString,QString>',(
Make
sure
'QMap<QString,QString>' is
regi
stered using q
Regi
sterMeta
Type
().).
上述错误,只有在跨线程
信号
传递
时
才会
出现
. 因为Q...
这个错误通常发生在使用
Qt
的
信号
与
槽
(signal-slot)机制
时
,
参数
类型
是自定义
类型
时
,
Qt
无法自动识别该
类型
,需要手动注册该
类型
。
在这种情况下,你需要在你的代码中调用`q
Regi
sterMeta
Type
`函数来注册这个
类型
。例如:
```cpp
q
Regi
sterMeta
Type
<QList<QString>>("QList<QString>");
将这行代码放在你的程序开始运行前,可以确保
Qt
能够正确地识别和处理该
类型
。
另外,如果你使用了多线程,还需要调用`moveToThread`函数将该对象移动到正确的线程中,以避免线程安全问题。