【问题标题】:Inaccessible QPushButton mystery无法访问的 QPushButton 之谜
【发布时间】:2011-06-16 14:39:54
【问题描述】:

我有一个 QT 应用程序。它具有连接到我程序中的插槽的功能 QPushButtons。我现在正在尝试添加一个新按钮 myNewButton,但不知何故,它没有被注册。

对于现有的工作按钮 myExistingButton 我有一行:

connect(ui->myExistingButton, SIGNAL(clicked()), this, SLOT(Foo()));

我不能简单地添加行:

connect(ui->myNewButton, SIGNAL(clicked()), this, SLOT(Foo()));

编译错误是:

class UI::Viewer has no member named 'myNewButton'

QT Creator 并没有将该按钮列为ui-> 的自动完成选项(即我没有简单地拼错名称)。 myExistingButtonmyNewButton 的记录除了在 ui 文件中的坐标和命名之外是相同的。什么可能导致此问题?

【问题讨论】:

    标签: c++ qt qt-creator


    【解决方案1】:

    我假设您确实在 .ui 表单中添加了一个新按钮并将其命名为 myNewButton,对吗?如果是这样,这可能是 Qt Creator 中的同步问题。您是否尝试过保存所有并重建(只是为了确保触发 ui 编译器)您的应用程序?

    【讨论】:

    • 是的 - 全部清理,全部重建,仍然不合作。
    【解决方案2】:

    您是否正确设置了小部件的父属性?

    upon creation,或者explicitly setting it

    编辑:还要注意

    • 您不应该直接编辑 ui_-includes,而是使用表单编辑器
    • 您不必对表单中硬声明的内容进行显式连接;再次,为此使用表单编辑器(右键单击按钮)

    【讨论】:

    • 是的,Viewer::Viewer(QWidget *parent),那里没有任何改变。
    • 我的意思更像这样:ui->myNewButton = new QButton(this); // 'this' is now its parent
    • 感谢您的建议 - 我没有直接编辑 ui 文件,只是想看看正在生成什么。不过,我会在表单编辑器中进行连接。
    【解决方案3】:

    我看到您通过删除 ui_viewer.h 解决了您的问题。但更简洁的方法是运行qMake(来自Build 菜单)。当我遇到像你这样的错误时,我总是这样做——有时Qt Creator 在应该运行的时候忘记运行qMake

    【讨论】:

    • 谢谢。如果再次发生这种情况,我将尝试您的方法并更改已接受的答案(如果有效)。
    【解决方案4】:

    我通过删除生成的文件ui_viewer.h然后重建来解决此问题。

    【讨论】:

    • 奇怪,这不应该是必要的。您的 .pro 文件是什么样的?
    • 将此帖子标记为答案,以帮助下一个阅读此主题的人。
    • 有时,Qt 就是那样疯狂。我以前也有过这样的经历。我在代码中所做的任何更改都不会影响程序。我什至对整个源文件进行了评论;它仍在工作。 :S 然后我删除了整个生成的文件,然后像他一样重建。
    • @RedX 在您将自己的问题标记为已回答之前有一段延迟(我认为是 48 小时),但我会的。 @Frank .pro 文件中真的没有什么奇怪的。如果再次发生,我会进一步调查。
    • 我遇到了类似的错误,但我没有 ui_viewer.h 文件,删除 ui_Settings.h 和 ui_MainWindow.h 会导致构建失败,并显示“没有创建目标的规则”
    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 2015-04-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多