【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框


  • 博客主页:Duck Bro 博客主页
  • 系列专栏:Qt 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

Qt窗口 | 对话框 | 创建自定义对话框

文章编号:Qt 学习笔记 / 52

文章目录

  • [Qt窗口 | 对话框 | 创建自定义对话框](#Qt窗口 | 对话框 | 创建自定义对话框)
    • 一、自定义对话框
      • [1. Qt标准对话框](#1. Qt标准对话框)
      • [2. 自定义对话框](#2. 自定义对话框)
    • 二、代码方式实现
      • [1. 创建QMainWindow窗口](#1. 创建QMainWindow窗口)
      • [2. 添加按钮来触发对话框](#2. 添加按钮来触发对话框)
      • [3. 创建C++类(Dialog类)](#3. 创建C++类(Dialog类))
      • [4. 编写按钮的槽函数](#4. 编写按钮的槽函数)
      • [5. 子窗口进行添加控件](#5. 子窗口进行添加控件)
    • 三、图形化实现
      • [1. 创建QMainWindow窗口](#1. 创建QMainWindow窗口)
      • [2. 创建一个按钮控件](#2. 创建一个按钮控件)
      • [3. 新建一个ui文件](#3. 新建一个ui文件)
      • [4. 在界面中创建按钮和标签](#4. 在界面中创建按钮和标签)
      • [5. 编写及创建按钮槽函数](#5. 编写及创建按钮槽函数)
      • [6. 编写及创建关闭按钮槽函数](#6. 编写及创建关闭按钮槽函数)

一、自定义对话框

1. Qt标准对话框

在Qt中存在许多自带的对话框,Qt 提供了多种可复⽤的对话框类型,即 Qt 标准对话框。Qt 标准对话框全部继承于QDialog类。

2. 自定义对话框

自定义对话框是一种可以根据用户需求进行定制的对话框界面。 通常,对话框是在应用程序中用于与用户进行交互的一种界面元素。而自定义对话框则可以根据具体的应用场景和功能需求,对对话框的样式、布局、内容等进行自定义。

例如,可以通过自定义对话框来创建一个具有特定样式和交互方式的确认对话框、输入对话框、选择对话框等。自定义对话框可以提供更加灵活和个性化的用户界面,以满足不同应用程序的需求。


二、代码方式实现

1. 创建QMainWindow窗口

步骤参考文章【Qt 学习笔记】Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍

在文章中详细介绍了如何创建一个QMainWindow窗口

2. 添加按钮来触发对话框

在QMainWindow窗口上,创建一个打开窗口的按钮

cpp 复制代码
//mainwindow.h
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    //声明槽函数
    void handle();

private:
    Ui::MainWindow *ui;
};
cpp 复制代码
//mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //创建一个按钮
    QPushButton* button = new QPushButton("打开窗口按钮",this);
    //设置按钮的大小
    button->resize(300,100);
    //移动按钮位置
    button->move(250,200);
    //按钮信号点击触发槽函数
    connect(button,&QPushButton::clicked,this,&MainWindow::handle);
}

运行结果

3. 创建C++类(Dialog类)

  • 创建一个新的类,类名为Dialog,继承QDialog类。



  • 对dialog.h和dialog.cpp进行修改

cpp 复制代码
//dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>

class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget* parent);
};

#endif // DIALOG_H
cpp 复制代码
//dialog.cpp
#include "dialog.h"

Dialog::Dialog(QWidget* parent) : QDialog(parent)
{

}

4. 编写按钮的槽函数

cpp 复制代码
void MainWindow::handle()
{
    //创建一个对话框
    Dialog * dialog = new Dialog(this);
    //设置窗口的大小
    dialog->resize(300,180);
    //设置窗口关闭
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    //显示窗口
    dialog->show();
}

运行结果

5. 子窗口进行添加控件

cpp 复制代码
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>

class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget* parent);
    void buttonclose();
};

#endif // DIALOG_H
cpp 复制代码
dialog.cpp
#include "dialog.h"
#include<QPushButton>
#include<QLabel>
#include<QVBoxLayout>
Dialog::Dialog(QWidget* parent) : QDialog(parent)
{
    //创建垂直布局
    QVBoxLayout* layout = new QVBoxLayout();
    this->setLayout(layout);
    //创建标签和按钮
    QLabel * label = new QLabel("这是一个窗口",this);
    QPushButton* button = new QPushButton("关闭",this);
    //将控件添加进布局中
    layout->addWidget(label);
    layout->addWidget(button);
    //进行按钮槽函数链接
    connect(button,&QPushButton::clicked,this,&Dialog::buttonclose);

}

void Dialog::buttonclose()
{
	//关闭子窗口
    this->close();
}

运行结果


三、图形化实现

1. 创建QMainWindow窗口

步骤参考文章【Qt 学习笔记】Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍

在文章中详细介绍了如何创建一个QMainWindow窗口

2. 创建一个按钮控件

在界面中拖拽进一个PushButton控件

3. 新建一个ui文件





4. 在界面中创建按钮和标签

在dialog.ui文件中创建PushButton按钮和Label标签

5. 编写及创建按钮槽函数


cpp 复制代码
void MainWindow::on_pushButton_clicked()
{
    //创建窗口
    Dialog* dialog = new Dialog(this);
    //关闭窗口释放内存
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    //展示窗口
    dialog->show();
}

6. 编写及创建关闭按钮槽函数

cpp 复制代码
void Dialog::on_pushButton_clicked()
{
    //关闭窗口
    this->close();
}

运行结果


相关推荐
VBA63373 分钟前
VBA数据库解决方案第十五讲:Recordset集合中单个数据的精确处理
开发语言
我命由我123455 分钟前
SSL 协议(HTTPS 协议的关键)
网络·经验分享·笔记·学习·https·ssl·学习方法
wrx繁星点点6 分钟前
事务的四大特性(ACID)
java·开发语言·数据库
不写八个13 分钟前
Python办公自动化教程(005):Word添加段落
开发语言·python·word
HEX9CF18 分钟前
【CTF Web】Pikachu xss之href输出 Writeup(GET请求+反射型XSS+javascript:伪协议绕过)
开发语言·前端·javascript·安全·网络安全·ecmascript·xss
赵荏苒43 分钟前
Python小白之Pandas1
开发语言·python
丶Darling.44 分钟前
代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作&&删除二叉搜索树中的节点&&修剪二叉搜索树
开发语言·数据结构·c++·笔记·学习·算法
人生の三重奏1 小时前
前端——js补充
开发语言·前端·javascript
平凡的小码农1 小时前
JAVA实现大写金额转小写金额
java·开发语言
百里香酚兰1 小时前
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录&解决方案
人工智能·学习·unity·大模型·deepseek