在Qt项目中,如果要实现一个弹出子界面并包含返回按钮的功能,最合适的选择是使用 Qt Dialog Form File 来创建子界面。
Qt Dialog Form File 与 Qt Widget Form File 的区别
Qt Dialog Form File (Button Bottom) 和 Qt Dialog Form File (Button Right):
这两种文件类型用于创建对话框(Dialog),其中包含了默认的按钮布局:
Button Bottom:按钮(如“OK”、“Cancel”)默认在对话框底部。
Button Right:按钮默认在对话框右侧。
对话框通常用于弹出窗口,它可以模态(阻塞父窗口的交互)或非模态。对话框有自己的事件循环,可以独立于主窗口运行,且在关闭时可以直接销毁。在 Qt Dialog Form File 中也可以显示 QOpenGLWidget 等窗口类型。
Qt Widget Form File:
这种文件类型用于创建一个普通的窗口部件(Widget),可以是主窗口的一部分,也可以作为独立窗口使用。和对话框不同,它没有自己的事件循环,因此更适合作为主窗口的一部分,而不是独立弹出的子界面。
VS+Qt添加ui子界面示例
基本功能:
在qtwidgetsapplication1.ui主界面中添加确认按钮,点击确认按钮能弹出一个子界面,子界面中也有返回按钮,点击返回子界面消失。
- 添加ui文件
-
修改ui界面对象名称并删除所有原先槽函数,根据需要修改按钮名称
-
主ui界面中添加按钮并修改名称
-
添加子窗口对应类文件并修改类的头文件属性
- 添加程序代码
# qtwidgetsapplication1.cpp
#include "qtwidgetsapplication1.h"
#include "subdialog.h"QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent): QWidget(parent), subDialog(nullptr) // 初始化子界面指针为 nullptr
{ui.setupUi(this);connect(ui.confirmButton, &QPushButton::clicked, this, &QtWidgetsApplication1::onConfirmButtonClicked);
}QtWidgetsApplication1::~QtWidgetsApplication1() {if (subDialog) {delete subDialog; // 清理子界面}
}void QtWidgetsApplication1::onConfirmButtonClicked() {if (!subDialog) {subDialog = new SubDialog(this); // 创建子界面实例}subDialog->show(); // 显示子界面
}
# qtwidgetsapplication1.h
#pragma once#include <QtWidgets/QWidget>
#include "subdialog.h"
#include "ui_qtwidgetsapplication1.h"class QtWidgetsApplication1 : public QWidget {Q_OBJECTpublic:QtWidgetsApplication1(QWidget* parent = nullptr);~QtWidgetsApplication1();private slots:void onConfirmButtonClicked(); private:Ui::QtWidgetsApplication1Class ui;SubDialog* subDialog;
};
# subdialog.cpp
#include "subdialog.h"SubDialog::SubDialog(QWidget* parent): QDialog(parent) {ui.setupUi(this);connect(ui.returnButton, &QPushButton::clicked, this, &SubDialog::onReturnButtonClicked);
}SubDialog::~SubDialog() {}void SubDialog::onReturnButtonClicked() {this->close();
}
# subdialog.h
#pragma once#include <QDialog>
#include "ui_subdialog.h"class SubDialog : public QDialog {Q_OBJECTpublic:explicit SubDialog(QWidget* parent = nullptr);~SubDialog();public slots:void onReturnButtonClicked(); // 返回按钮的槽函数private:Ui::SubDialog ui;
};
- 运行即可
说明:运行后可查看系统自动生成的ui_xxx.h文件