我已经检查了很多次,但找不到我的错误。
在我的班级,我有:
connect(userControl, SIGNAL(DataToPlot(std::vector<double>)), this, SLOT(test(std::vector<double>)));
在同一个班级,我有一个测试功能和原型:
public slots:
void test(std::vector<double>);
void RelayduinoGuiThreading::test(std::vector<double> x)
{
123; // I put a breakpoint on this line to check when the slot is called.
}
在一个单独的线程中运行,我有以下内容:
signals:
void DataToPlot(std::vector<double>);
somefunction
{
// Stuff...
std::vector<double> x;
emit(DataToPlot(x));
}
现在就是这样,如果我将std :: vector更改为int或double,它就可以工作。
此外,#include包含在两个类标题中。
我甚至在我的项目中的其他地方发出std :: vector并捕获信号并且没有问题。
非常感谢帮助。
谢谢。
答案 0 :(得分:3)
正如Qt Docu中提到的那样
请注意,如果您打算在排队信号和插槽连接中使用类型,或者在QObject的属性系统中使用,则还必须调用qRegisterMetaType(),因为名称是在运行时解析的。
因此,在您的主应用程序中,您必须致电:
qRegisterMetaType<std::vector<float> >("std::vector<float>");
并在您的RelayduinoGuiThreading
标头文件中(如提到的tibur):
Q_DECLARE_METATYPE(std::vector<float>);
Here是详细的文档
答案 1 :(得分:1)
尝试在RelayduinoGuiThreading
标题中添加此内容:
Q_DECLARE_METATYPE(std::vector<float>);