【问题标题】:Getting errors when using Qt Creator to create signals and slots使用 Qt Creator 创建信号和插槽时出现错误
【发布时间】:2011-02-14 13:13:56
【问题描述】:

我使用 Qt Creator(4.7.0 版)创建了一个新对话框 - 模板化表单之一(带有确定和取消按钮)。

我希望用户在表单上输入一些数据,然后当他们单击“确定”时,它会保存该信息。所以我看了一下,发现当点击 OK 按钮时,它会向对话框的接受槽发送信号。

所以我右键单击设计视图中的对话框,然后选择“转到插槽...”。我单击了“已接受”选项,该选项将 on_Dialog_accepted() 方法放入对话框类中。但是,当我运行程序并打开对话框时,我的控制台中出现错误提示 QMetaObject::connectSlotsByName: No matching signal for on_Dialog_accepted()

那么我做错了什么?

我在 connectSlotsByName 上找到了文档 - 但没有任何关于没有经验的 Qt 开发人员可能陷入的明显错误。

【问题讨论】:

    标签: qt qt4


    【解决方案1】:

    在选择“Go to slot...”之前右键单击设计视图中的对话框,将对话框的信号连接到对话框的插槽,这不适用于 QMetaObject::connectSlotsByName(),因为该方法搜索所有子对象,但不搜索对象本身。

    您实际上想要做的是右键单击“确定”按钮,然后从那里选择“转到插槽...”。然后它将使用您的按钮小部件的名称创建一个插槽,并在运行时正确建立连接。

    QtDesigner 让您从对话框中选择“Go to slot...”是没有意义的。您可能需要为此向 Qt 的开发人员提交错误。

    【讨论】:

    • 谢谢 - 我今晚会试一试。我会看看如何制作那个错误报告。
    • 好的 - 所以,这个答案停止了警告,我的程序开始运行。然而,今天早上我在喝咖啡的时候向我的 Qt 开发伙伴询问了这个问题,他认为这里还有其他问题。该按钮应该已经将信号传递给对话框接受槽(我可能会在这里遇到术语问题 - 我仍在掌握信号/槽)
    【解决方案2】:

    基本上就像 Fred 解释的那样:你没有做错任何事。 这是QtCreator bug。和一个相当老的那个。不幸的是,即使在两年后,这方面也没有任何改变。

    上述错误的受让人决定将其重定向到 QtCore bug,它只是要求更改 QMetaObject::connectSlotsByName() 以使其也处理传递的对象,而不仅仅是它的子对象(从而解决了 QtCreator 问题)。

    我查看了源并提交了一个琐碎的patch

    更新:补丁被接受,这意味着这个bug在 Qt 5.1 中修复。注意:与您使用的 QtCreator 版本无关,而与您将代码链接到的 Qt 版本无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 2015-07-18
      • 2013-09-27
      • 1970-01-01
      相关资源
      最近更新 更多