5

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

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)

4

3 回答 3

14

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

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

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

于 2013-02-08T14:03:08.170 回答
2

我找到了信号槽的解决方案:信号和槽函数的声明和调用不匹配!我一修好它们,插槽就被调用了。

在这里,您可能会遇到所有可能的错误方式。

调试 Qt 信号和槽的 20 种方法

希望,阅读这篇文章后它会有所帮助,并会节省您的时间。

于 2015-09-30T06:27:39.677 回答
0

当你声明槽/信号时,你可以像这样基于参数结构的命名空间:

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

而不是从“命名空间”内部使用 ClassA::structA。如果您尝试引用同一命名空间内的结构,这很有用。

于 2015-11-30T22:04:33.237 回答