Qt 出现QObject::connect: Cannot queue arguments of type ‘QVector’ (Make sure ‘QVector’ is registered using qRegisterMetaType().)错误
时间: 2024-05-14 11:12:53 浏览: 5
这个错误是由于Qt无法将QVector类型的参数放入信号槽队列中,需要使用qRegisterMetaType()函数将QVector类型注册到Qt元对象系统中。
具体的做法是在包含QVector的头文件之后,使用qRegisterMetaType()函数将QVector类型注册到Qt元对象系统中,示例代码如下:
```cpp
#include <QVector>
...
qRegisterMetaType<QVector<int>>("QVector<int>");
```
上述代码将QVector<int>类型注册到Qt元对象系统中,可以通过信号槽传递QVector<int>类型的参数了。如果需要传递其他类型的QVector,只需要将模板参数修改为相应的类型即可。
相关问题
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>"); 这样就能够解决这个问题了。
qobject::connect: cannot queue arguments of type 'DialogInfoStu' (make sure 'DiagloInfoStu &' is registered using qRegisterMetaType
这个错误通常是因为Qt的信号和槽连接中,信号和槽的参数类型不匹配造成的。在这个错误中,它显示的是不能将类型为‘DialogInfoStu’的参数加入到队列中,因为该类型没有被注册。所以,你需要在连接信号和槽之前,使用qRegisterMetaType函数对该类型进行注册。
例如,如果你的信号和槽定义如下:
```cpp
signals:
void dialogInfo(const DialogInfoStu& info);
public slots:
void handleInfo(const DialogInfoStu& info);
```
那么在使用connect函数进行连接之前,你需要在代码中添加以下语句:
```cpp
qRegisterMetaType<DialogInfoStu>("DialogInfoStu"); // 注册类型
connect(obj, &MyClass::dialogInfo, this, &MyClass::handleInfo); // 连接信号和槽
```
这样就可以避免出现该错误。