c++ - 如何使用 button.clicked() 事件在 Qt 中调用创建的 .ui 设计表单?

标签 c++ qt user-interface

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

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

请各位用过Qt编程的 friend 帮我解决这个问题,把PushButton和.ui窗体连接起来,这样PushButton就可以调用/显示在.ui中创建的窗体了。

感谢您的关注。

最佳答案

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 键并单击 include 指令中的文件名“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);
}

关于c++ - 如何使用 button.clicked() 事件在 Qt 中调用创建的 .ui 设计表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8545830/

相关文章:

c++ - 你能在控制台程序中创建一个启动窗口吗?

c++ - 如果存在,如何调用模板化函数,否则如何调用?

c++ - Qt:将 protected QListWidget::itemChanged 信号连接到插槽

java - 通过方法和 GUI 获取输入

python - 代码错误: TypeError: expected str,字节或os.PathLike对象,而不是_io.TextIOWrapper

c++ - 虚拟调度实现细节

c++ - while 比 for 快吗?

c++ - Qt:关闭模态对话框关闭程序

c++ - 如何让一个函数在 Qt 中暂时成为一个槽?

user-interface - Walk GUI Toolkit for GO 中的文件选择器组件