【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:可供选择的条目

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

三、结束语

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

相关推荐
十五年专注C++开发6 小时前
Qt-Nice-Frameless-Window: 一个跨平台无边框窗口(Frameless Window)解决方案
开发语言·c++·qt
江公望7 小时前
装了新的QtCreator17,没有用Qt5.12自带的QtCreator4,导致QtCreator17无法找到Qt5.12帮助文档
qt·qml
ctgu909 小时前
PyQt5(八):ui设置为可以手动随意拉伸功能
开发语言·qt·ui
进击的大海贼11 小时前
QT/C++ 消息定时管理器
开发语言·c++·qt
Lj2_jOker13 小时前
QT 给Qimage数据赋值,显示异常,像素对齐的坑
开发语言·前端·qt
孤独的追光者17 小时前
使用Qt Designer开发上位机
开发语言·python·qt
Molesidy1 天前
【随笔】【QT】QT5.15.2版本的最新下载方式!!!
开发语言·qt
梨轻巧1 天前
pyside6的历史发展、Qt 介绍、PyQt 和 pyside6对比
qt·pyqt
恋恋西风1 天前
Qt 打开文件列表选择文件,实现拖拽方式打开文件,拖拽加载
开发语言·qt
奔跑吧 android1 天前
【Qt】【1. 版本特性介绍】
qt·cpp·qml