【Qt】QDialog对话框

> 作者:დ旧言~

> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:了解 Qt 对话框的基本概念,并能使用。

> 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!

> 专栏选自:QT从基础到入门_დ旧言~的博客-CSDN博客

> 望小伙伴们点赞👍收藏✨加关注哟💕💕

一、概念

概念:

对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。

Qt常用的内置对话框有:

  • QFiledialog(文件对话框)
  • QColorDialog(颜色对话框)
  • QFontDialog(字体对话框)
  • QInputDialog(输入对话框)
  • QMessageBox(消息框)

二、对话框的分类


2.1、模态对话框

概念:

模态对话框指的是:显示后无法与父窗口进行交互,是一种阻塞式的对话框。使用QDialog::exec()函数调用。模态对话框使用于必须依赖用户选择的场合,如消息显示、文件选择,打印设置等。

**代码示例:**在菜单项中,点击菜单项时就会触发triggered()信号

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    QMenuBar* menubar = menuBar();
    this->setMenuBar(menubar);
 
    QMenu* menu1 = new QMenu("文件");
    QMenu* menu2 = new QMenu("编辑");
    menubar->addMenu(menu1);
    menubar->addMenu(menu2);
 
    QAction* action = new QAction("新建");
    menu1->addAction(action);
 
    QToolBar* toolbar = new QToolBar(this);
    this->addToolBar(toolbar);
    toolbar->addAction(action);
    
    //当点击新建时,弹出一个模态对话框
    connect(action, &QAction::triggered, [=](){
        QDialog dialog;
        dialog.resize(300, 200);
        dialog.exec();
    });
}
 
MainWindow::~MainWindow()
{
    delete ui;
}

2.2、非模态对话框

概念:

  • 非模态对话框显示后独立存在,可以同时与父窗口进行交互,是一种非阻塞式对话框,使用QDialog::show()函数调用。
  • 非模态对话框一般在堆上创建,若创建在栈上,弹出的非模态对话框就会一闪而过。

需设置Qt:

WA_DeleteOnClose属性。

目的是:

当创建多个非模态对话框时(如打开了多个非模态窗口),为了避免内存泄漏要设置此属性,非模态对话框适用于特殊功能设置的场合,如查找操作,属性设置等。

代码呈现:

cpp 复制代码
//当点击新建时,弹出一个模态对话框
connect(action, &QAction::triggered, [=](){
    //非模态对话框,创建在堆区,防止一闪而过
    QDialog* dialog = new QDialog(this);
    //调整尺寸
    dialog->resize(300, 200);
    //当dialog无限创建时,设置该属性可以在关闭非模态对话框时自动释放该对象,防止内存泄露
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    dialog->show();
});

2.3、混合属性对话框

概念:

混合属性对话框同时具有模态对话框和非模态对话框的属性,对话框的生成和销毁具有非模态对话框属性,功能上具有模态对话框的属性,使用QDialog::setModal()函数可以创建混合特性的对话框。创建对话框时需要指定对话框的父组件。

代码呈现:

cpp 复制代码
connect(action, &QAction::triggered, [=]() {
    QDialog* dialog = new QDialog(this);
 
    dialog->setAttribute(Qt::WA_DeleteOnClose);
 
    dialog->setModal(true);
 
    dialog->resize(300, 200);
 
    dialog->show();
});

三、消息对话框 QMessageBox

概念:

消息对话框是应用程序中最常用的界面元素。消息对话框主要用于为用户提示重要信息,强制用户进行选择操作 QMessageBox 类中定义了静态成员函数,可以直接调用创建不同风格的消息对话框。

**示例①:**问题提示消息对话框

其中可以设置的按钮的类型如下:

**示例②:**信息提示消息对话框

实现效果如下:

四、颜色对话框QColorDialog

颜⾊对话框的功能是允许用户选择颜色,继承自QDialog类:

常用方法介绍:

  • QColorDialog (QWidget *parent = nullptr) //创建对象的同时设置父对象
  • QColorDialog(const QColor &initial, QWidget *parent = nullptr) //创建对象的同时通过QColor对象设置默认颜色和父对象
  • void setCurrentColor(const QColor &color) //设置当前颜色对话框
  • QColor currentColor() const //获取当前颜色对话框
  • QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString&title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()) //打开颜色选择对话框,并返回⼀个QColor对象
  • void open(QObject *receiver, const char *member) //打开颜色对话框

代码示例:

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    resize(800, 600);
 
    QPushButton* btn = new QPushButton("颜色对话框", this);
    //创建颜色对话框
    QColorDialog* cdlog = new QColorDialog(this);
 
    connect(btn, &QPushButton::clicked, [=]() {
        //打开颜色对话框,并设置默认颜色为红色
        QColor color = cdlog->getColor(QColor(255, 0, 0));
        qDebug() << "r = " << color.red();
        qDebug() << "g = " << color.green();
        qDebug() << "b = " << color.blue();
    });
}
 
MainWindow::~MainWindow()
{
    delete ui;
}

五、文件对话框QFileDialog

概念:

文件对话框用于应用程序中需要打开一个外部文件或需要将当前内容存储到指定的外部文件。

常用方法介绍:

  • **打开文件(一次只能打开一个文件):**QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
  • **打开多个文件(一次可以打开多个文件):**QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(),const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
  • **保存文件:**QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(),const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

**代码示例:**打开文件

**代码示例:**保存文件

六、字体对话框QFontDialog

概念:

Qt中提供了预定义的字体对话框类QFontDialog,用于提供选择字体的对话框部件。

七、输入对话框QInputDialog

概念:

Qt中提供了预定义的输入对话框类:QInputDialog,用于进行临时数据输入的场合。

整型输入数据对话框:

双精度浮点型输入数据对话框:

选择条目型输入数据框:

参数说明:

  • parent:父亲
  • title:对话框标题
  • label:对话框标签
  • items:可供选择的条目

**代码示例:**浮点型数据输入对话框

三、结束语

今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

相关推荐
尘中远12 小时前
【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
qt·数据可视化·qcustomplot·qwt·工业软件·科学绘图
sycmancia14 小时前
Qt——多线程间的互斥
开发语言·qt
尘中远19 小时前
【Qwt 7.0 系列】常用图表类型实战 —— 柱状图、散点图、箱线图与直方图
qt·qwt·工业软件·科学绘图
尘中远20 小时前
【Qwt 7.0 系列】交互功能详解 —— 平移、缩放、坐标轴交互与数据拾取
qt·数据可视化·绘图·qcustomplot·qwt·科学绘图
sycmancia20 小时前
Qt——进程与线程的概念
qt
郝学胜-神的一滴21 小时前
Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
开发语言·c++·qt·程序人生·软件开发·用户界面
尘中远21 小时前
【Qwt 7.0 系列】3D 数据可视化 —— OpenGL 高性能三维绘图
qt·3d·qcustomplot·qwt·科学绘图·高性能绘图
满天星830357721 小时前
【Qt】控件(二) (geometry及与frameGeometry的区别)
开发语言·qt
大气的小蜜蜂1 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·qt·sqlite
尘中远1 天前
【Qwt 7.0 系列】总体架构解析 —— 从单体到三库模块化的演进
qt·matplotlib·绘图·qwt·科学绘图