【问题标题】:How to call created .ui design form in Qt with button.clicked() event?如何使用 button.clicked() 事件在 Qt 中调用创建的 .ui 设计表单?
【发布时间】:2011-12-17 15:44:40
【问题描述】:

我是Qt的新手,想问一下如何调用创建的.ui设计器表单与MainWindow中的PushButton连接。

我做了什么: 1.在当前项目中新建一个.ui设计表单(Forms.right click -> Add New -> Qt Designer Form)。 2.在创建的.ui表单中设计了一个关于对话框。 3.在MainWindow中创建一个槽PushButton.clicked()。

所有用过Qt编程的朋友,请帮我解决这个问题,把PushButton和.ui表单连接起来,这样PushButton就可以调用/显示在.ui中创建的表单了。

感谢您的关注。

【问题讨论】:

    标签: c++ qt user-interface


    【解决方案1】:

    Qt 的文档中解释了使用 .ui 文件: http://doc.qt.io/archives/qt-4.7/designer-using-a-ui-file.html

    总结: 处理 .ui 文件的最简单方法是在编译时通过uic(用户界面编译器)运行它。如果 .ui 文件包含在您的项目 (.pro) 文件中,这将自动完成。 (在您的情况下,“Add New”可能已经自动完成了。)然后您只需在源文件中包含生成的 C++ 头文件。它的名称应该类似于“ui_nameoftheoriginaluifile.hpp”。当然,之后需要实例化.hpp文件中定义的表单。

    编辑添加:

    从可读性开始,您的代码存在几个问题。我不知道你以前是否使用过面向对象的语言,但 C++ 中的一个非常基本的规则是类名以大写字母开头,以便于将它们与对象和其他变量区分开来。所以类名应该是“About”、“Parent”等。

    编译错误是由于使用“about”而不是“ui_about.hpp”文件中实际使用的类名-“MainWindow”引起的。 (这取决于您在 .ui 文件中使用的表单名称。)

    如果您使用的是 Qt Creator:按住 Ctrl 键并单击包含指令中的文件“ui_about.h”的名称。这将打开它进行检查。试着弄清楚它是如何工作的。

    您还没有将 opDialog() 函数定义为“parent.cpp”中“父”类的成员,这会导致另一个编译时错误。

    您也不应该将 QMainWindow 用于关于对话框。 QMainWindow 应该是您的应用程序的主窗口 - 不应再有它的任何实例。

    所以,about.h:

    namespace Ui {
        class MainWindow;
    }
    
    class about : public QMainWindow {
        Q_OBJECT
    public:
        about(QWidget *parent = 0);
        ~about();
    
    protected:
        void changeEvent(QEvent *e);
    
    private:
        Ui::MainWindow *ui;
    };
    

    还有about.cpp的开头:

    #include "about.h"
    #include "ui_about.h"
    
    about::about(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    

    【讨论】:

    • 对于我迟到的回复,我深表歉意。顺便说一句,谢谢你的回复。根据 (stackoverflow.com/questions/1518317/…) 中的类似帖子和 (doc.qt.nokia.com/4.7/designer-using-a-ui-file.html) 中的示例。我做了一个简单的项目来打开一个与按钮连接的关于窗口。我已将我的项目上传到 (mediafire.com/?y6z0ub4f0k0fnkd)。但是,仍然有一个我无法弄清楚的错误。你想看看我的项目并解释我能做些什么来解决它。我非常感激。谢谢
    • 向其他人发送压缩包时,请使用比 RAR 更便携的压缩包格式。例如,ZIP 在任何地方都可以接受。
    【解决方案2】:

    很抱歉先生,因为我必须完成我在大学的人脸识别项目,所以我在很久没有登录后现在才回复。 顺便说一句,在尝试了很多“试验和错误”之后,我已经解决了我的问题,现在我可以做得很好了。 我已经发布了我的项目以回答“如何使用 button.clicked() 事件在 Qt 中调用创建的 .ui 设计表单?”在我的个人博客中。

    这是帖子链接:http://hxr99.blogspot.com/2011/12/how-to-call-ui-design-form-with.html。 也有一个用于调用窗口的示例项目的下载链接。 也许它可以帮助世界各地的人们开始 Qt 编程。

    非常感谢你帮我解决了我的问题,很抱歉我的英语不是很好。 圣诞快乐和新年快乐。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多