【Qt】QDialog对话框

本文详细介绍了QtGUI编程中对话框的分类,包括模态对话框(如QDialog)、非模态对话框(QDialogwithWA_DeleteOnClose)和混合属性对话框,以及QMessageBox、QColorDialog、QFileDialog和QFontDialog等内置对话框的使用示例。
摘要由CSDN通过智能技术生成

目录

一、概念

二、对话框的分类

2.1 模态对话框

2.2 非模态对话框

2.3 混合属性对话框

三、消息对话框QMessageBox

四、颜色对话框QColorDialog

五、文件对话框QFileDialog

六、字体对话框QFontDialog

七、输入对话框QInputDialog


一、概念

对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有:QFiledialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog(字体对话框)、QInputDialog(输入对话框)和QMessageBox(消息框)

二、对话框的分类

2.1 模态对话框

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

代码示例

在菜单项中,点击菜单项时就会触发triggered()信号

#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属性,目的是:当创建多个非模态对话框时(如打开了多个非模态窗口),为了避免内存泄漏要设置此属性

非模态对话框适用于特殊功能设置的场合,如查找操作,属性设置等

//当点击新建时,弹出一个模态对话框
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()函数可以创建混合特性的对话框。创建对话框时需要指定对话框的父组件

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类中定义了静态成员函数,可以直接调用创建不同风格的消息对话框:

Question用于正常操作过程中的提问
Information用于报告正常运行信息
Warning用于报告非关键错误
Critical用于报告严重错误

代码示例:问题提示消息对话框

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

四、颜色对话框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) //打开颜色对话框

代码示例

#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())

  • parent        父亲
  • caption        对话框标题
  • dir        默认打开的路径
  • filter        文件过滤器

代码示例:打开文件

代码示例:保存文件

六、字体对话框QFontDialog

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

七、输入对话框QInputDialog

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

整型输入数据对话框

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

选择条目型输入数据框 

参数说明:

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

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

  • 28
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG_Bond20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值