Object :: connect:没有这样的信号

时间:2013-02-08 13:15:41

标签: qt signals-slots qobject

使用结构创建自定义插槽/信号时遇到问题。我有以下代码:

qRegisterMetaType<namespace::myClassA::aStruct>();
QObject::connect(&myClassA, SIGNAL(theSignal(myClassA::aStruct)),
                  &myClassB, SLOT(theSlot(myClassA::aStruct)));

运行程序时我得到了:

Object::connect: No such signal NameSpace::myClassA::theSignal(myClassA::aStruct)
Object::connect:  (receiver name: 'NameSpace__CLASSNAME')

我该如何解决这个问题?

PS:插槽和信号已在头文件文件Q_SIGNALS和Q_SLOTS关键字中正确声明,并带有正确的参数(aStruct)

3 个答案:

答案 0 :(得分:11)

信号/插槽连接中使用的类型必须完全“作用域”,因为方法调用会转换为文本,因此您的连接调用应如下所示:

QObject::connect(&myClassA, SIGNAL(theSignal(namespace::myClassA::aStruct)),
                 &myClassB, SLOT(theSlot(namespace::myClassA::aStruct)));

您可能必须更新信号/插槽声明参数才能匹配。

答案 1 :(得分:2)

我找到了信号槽的解决方案: 信号和插槽功能的声明和调用是不匹配的!一旦我修好它们,就会调用插槽。

在这里你可能会遇到所有可能的错误。

20 ways to debug Qt signals and slots

希望,在阅读这篇文章之后,它会有很多帮助,并且会节省你的时间。

答案 2 :(得分:0)

当您声明插槽/信号时,您可以将参数结构的名称空间作为基础:

::命名空间:: ClassA的:: structA

而不是使用内部&#39;命名空间&#39;中的ClassA :: structA。如果您尝试在同一名称空间内引用结构,这将非常有用。