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().)
时间: 2023-09-15 16:15:02 浏览: 48
这个问题是因为 Qt 的信号与槽机制需要知道参数的类型信息,但是标准库中的容器类型并没有被 Qt 自动支持。因此,当你试图在信号与槽之间传递一个 std::vector<std::map<std::string,double>> 对象时,Qt 报错提示你需要使用 qRegisterMetaType() 函数将该类型注册到 Qt 的元对象系统中。在注册之后,Qt 就能够正确地识别这个类型并在信号与槽之间传递它了。
相关问题
QObject::connect: Cannot queue arguments of type 'std::vector<double>'
这个错误是因为 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 'QVector<Position>&'
这是一个 Qt 框架中的错误信息,它表示在使用 QObject::connect 函数时,不能将 QVector<Position> 类型的参数加入到信号和槽的参数队列中。可能的原因是您在连接信号和槽时,信号和槽的参数类型不匹配,或者您尝试将不支持的类型传递给信号或槽。
解决此问题的方法是检查信号和槽的参数类型,并确保它们匹配。如果您需要传递 QVector<Position> 类型的参数,可以考虑使用 QVariant 或者自定义信号和槽来解决问题。