对象::连接:没有这样的信号
问题描述:
我有一个问题来创建一个结构自定义插槽/信号。我有以下代码:对象::连接:没有这样的信号
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)
答
信号/插槽连接时,必须充分“作用域”使用的类型,因为方法调用被转换成文本,所以你的连接呼叫应该是这样的:
QObject::connect(&myClassA, SIGNAL(theSignal(namespace::myClassA::aStruct)),
&myClassB, SLOT(theSlot(namespace::myClassA::aStruct)));
你可能需要更新的信号/槽声明的参数相匹配。
+0
你刚从释放信号/插槽连接故障的糟糕地狱中释放了我。谢谢你,先生(或女士) – 2013-07-16 00:44:22
答
我找到了信号槽的解决方案: 信号和槽功能的声明和调用是不匹配的!一旦我修好它们,该槽就被召唤了。
在这里,你可能会得到所有可能的错误。
20 ways to debug Qt signals and slots
希望,它帮助了很多阅读本articlethis后,将节省您的时间。
答
在声明时隙/信号,则可以立足参数结构的命名空间像这样:
::命名空间:: ClassA的:: structA
而不是使用ClassA的:: structA从内侧“命名空间”。如果您尝试引用同一名称空间内的结构,这非常有用。
您是否在执行信号和插槽后运行'qmake'? – PrisonMonkeys 2013-02-08 13:22:42
Q_DECLARE_METATYPE/qRegisterMetatype不需要,它也不会帮助直接连接(当两个对象都在同一个线程中时默认) – 2013-02-08 14:32:52
对我来说,即使看起来像小小的针脚,也会妨碍正常运行:SIGNAL(PageClosed (QWidget *页面))产生了一个错误。我删除了参数:页面,并被接受。 – peter70 2018-03-02 09:32:30