使用结构创建自定义插槽/信号时遇到问题。我有以下代码:
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)
答案 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。如果您尝试在同一名称空间内引用结构,这将非常有用。