Vs+Qt添加ui子页面

在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主界面中添加确认按钮,点击确认按钮能弹出一个子界面,子界面中也有返回按钮,点击返回子界面消失。

  1. 添加ui文件
    image

image

  1. 修改ui界面对象名称并删除所有原先槽函数,根据需要修改按钮名称
    image

  2. 主ui界面中添加按钮并修改名称
    image

  3. 添加子窗口对应类文件并修改类的头文件属性
    image

image

image

image

  1. 添加程序代码
# 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;
};
  1. 运行即可
    image

说明:运行后可查看系统自动生成的ui_xxx.h文件
image

posted @ 2024-08-12 13:43  小阮向阳  阅读(278)  评论(0编辑  收藏  举报