QObject::connect: Cannot queue arguments of type 'QList<QString>' (Make sure 'QList<QString>' is registered using qRegisterMetaType().)
时间: 2023-07-13 20:04:14 浏览: 111
这个错误通常发生在使用Qt的信号与槽(signal-slot)机制时,参数类型是自定义类型时,Qt无法自动识别该类型,需要手动注册该类型。
在这种情况下,你需要在你的代码中调用`qRegisterMetaType`函数来注册这个类型。例如:
```cpp
qRegisterMetaType<QList<QString>>("QList<QString>");
```
将这行代码放在你的程序开始运行前,可以确保Qt能够正确地识别和处理该类型。
另外,如果你使用了多线程,还需要调用`moveToThread`函数将该对象移动到正确的线程中,以避免线程安全问题。
相关问题
在使用多线程时报错QObject::connect: Cannot queue arguments of type 'QList<QString>' (Make sure 'QList<QString>' is registered using qRegisterMetaType().)
这个错误通常是因为在使用 `QObject::connect()` 函数时,信号和槽之间传递的参数类型没有被注册。在你的情况下,这个错误是由于 `QList<QString>` 没有被注册。
解决这个问题可以使用 `qRegisterMetaType()` 函数来注册 `QList<QString>` 类型,例如:
```cpp
qRegisterMetaType<QList<QString>>("QList<QString>");
```
你需要在程序的早期进行注册,例如在 `main()` 函数中。
如果你使用的是 Qt 5 版本,也可以使用 `Q_DECLARE_METATYPE()` 宏来注册自定义类型,例如:
```cpp
Q_DECLARE_METATYPE(QList<QString>)
```
注意,在使用 `Q_DECLARE_METATYPE()` 宏时,类型名称需要与 `qRegisterMetaType()` 函数中注册的名称一致。
QObject::connect: Cannot queue arguments of type 'QVector<int>' (Make sure 'QVector<int>' is registered using qRegisterMetaType().)
这个错误是因为你在使用Qt的信号与槽机制时,参数列表中包含了QVector<int>这种自定义类型,但是Qt无法识别这个类型,需要手动在代码中使用qRegisterMetaType函数进行注册。具体来说,你需要在程序的初始化部分,比如main函数中,加入如下代码:qRegisterMetaType<QVector<int>>("QVector<int>"); 这样就能够解决这个问题了。