QObject::connect: Cannot queue arguments of type 'std::vector<double>'
时间: 2024-01-22 16:02:42 浏览: 182
这个错误是因为 Qt 的信号和槽机制不支持传递 STL 容器类型,例如 `std::vector`。你需要将信号和槽的参数改为 Qt 支持的类型。可以考虑使用 Qt 的容器类型,例如 `QVector`。
如果你需要在信号和槽之间传递自定义数据类型,可以在定义自定义类型时使用 Qt 的元对象系统。具体方法是通过 `Q_DECLARE_METATYPE` 宏和 `qRegisterMetaType` 函数注册你的自定义类型,这样 Qt 就能够识别你的类型并支持传递。例如:
```cpp
#include <QMetaType>
class MyData {
public:
int value1;
double value2;
};
Q_DECLARE_METATYPE(MyData)
...
// 注册自定义类型
qRegisterMetaType<MyData>("MyData");
...
// 在信号和槽中使用
signals:
void mySignal(MyData data);
public slots:
void mySlot(MyData data);
```
需要注意的是,如果你的自定义类型中包含指针类型,那么你需要自己定义拷贝构造函数和析构函数,并确保正确地管理内存。
相关问题
QObject::connect: Cannot queue arguments of type 'std::vector<std::map<std::string,double> >' (Make sure 'std::vector<std::map<std::string,double> >' is registered using qRegisterMetaType().)
这个问题是因为 Qt 的信号与槽机制需要知道参数的类型信息,但是标准库中的容器类型并没有被 Qt 自动支持。因此,当你试图在信号与槽之间传递一个 std::vector<std::map<std::string,double>> 对象时,Qt 报错提示你需要使用 qRegisterMetaType() 函数将该类型注册到 Qt 的元对象系统中。在注册之后,Qt 就能够正确地识别这个类型并在信号与槽之间传递它了。
QObject::connect: Cannot queue arguments of type 'CZigMessageInfo' (Make sure 'CZigMessageInfo' is registered using qRegisterMetaType().)QObject::connect: Cannot queue arguments of type 'CZigMessageInfo' (Make sure 'CZigMessageInfo' is registered using qRegisterMetaType().)"rece
这个问题通常出现在使用Qt的信号槽机制时,当信号或槽的参数类型不是Qt内置的类型或者没有使用qRegisterMetaType()方法进行注册时,就会出现这个问题。
解决方法是,在使用信号槽时,确保信号和槽的参数类型是Qt内置类型或者已经使用qRegisterMetaType()方法进行注册。如果是自定义类型,需要在类的头文件中添加Q_DECLARE_METATYPE宏,并在程序中使用qRegisterMetaType()进行注册。
例如,在使用CZigMessageInfo类型的参数时,可以在CZigMessageInfo类的头文件中添加如下代码:
```
#include <QMetaType>
Q_DECLARE_METATYPE(CZigMessageInfo)
```
然后在程序中使用qRegisterMetaType()进行注册:
```
qRegisterMetaType<CZigMessageInfo>("CZigMessageInfo");
```
这样就可以解决上述问题。
阅读全文