对象::连接:没有这样的信号

问题描述:

我有一个问题来创建一个结构自定义插槽/信号。我有以下代码:对象::连接:没有这样的信号

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)

+1

您是否在执行信号和插槽后运行'qmake'? – PrisonMonkeys 2013-02-08 13:22:42

+0

Q_DECLARE_METATYPE/qRegisterMetatype不需要,它也不会帮助直接连接(当两个对象都在同一个线程中时默认) – 2013-02-08 14:32:52

+0

对我来说,即使看起来像小小的针脚,也会妨碍正常运行:SIGNAL(PageClosed (QWidget *页面))产生了一个错误。我删除了参数:页面,并被接受。 – peter70 2018-03-02 09:32:30

信号/插槽连接时,必须充分“作用域”使用的类型,因为方法调用被转换成文本,所以你的连接呼叫应该是这样的:

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从内侧“命名空间”。如果您尝试引用同一名称空间内的结构,这非常有用。