【问题标题】:Object::connect: No such signalObject::connect: 没有这样的信号
【发布时间】:2013-02-08 13:15:41
【问题描述】:

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

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)

【问题讨论】:

  • 你在实现信号和槽后运行qmake了吗?
  • Q_DECLARE_METATYPE/qRegisterMetatype 不是必需的,也对直接连接没有帮助(两个对象位于同一线程中时的默认设置)
  • 我突然想到,即使是看起来像小针孔的东西,也会妨碍正常运行:SIGNAL(PageClosed(QWidget *page)) 产生了错误。我删除了参数:page,它被接受了。

标签: qt signals-slots qobject


【解决方案1】:

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

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

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

【讨论】:

  • 你刚刚把我从解决信号/插槽连接问题的可怕地狱中解救了出来。谢谢好心的先生(或女士)
【解决方案2】:

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

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

20 ways to debug Qt signals and slots

希望,看完这篇文章对你有很大帮助,可以节省你的时间。

【讨论】:

    【解决方案3】:

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

    ::namespace::ClassA::structA

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      相关资源
      最近更新 更多