Qt信号和插槽连接似乎不起作用

时间:2012-02-08 11:54:56

标签: visual-studio-2010 qt4

我已经检查了很多次,但找不到我的错误。

在我的班级,我有:

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并捕获信号并且没有问题。

非常感谢帮助。

谢谢。

2 个答案:

答案 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>);