在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_OBJECT
public:
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_OBJECT
public:
explicit SubDialog(QWidget* parent = nullptr);
~SubDialog();
public slots:
void onReturnButtonClicked(); // 返回按钮的槽函数
private:
Ui::SubDialog ui;
};
- 运行即可
说明:运行后可查看系统自动生成的ui_xxx.h文件