当前位置: 首页 > article >正文

QT模态对话框和非模态对话框区别以及常用标准对话框

QT模态对话框和非模态对话框区别以及常用标准对话框

1.概述

这篇文章介绍下对话框的分类,它分为模态对话框和非模态对话框。
模态对话框:打开对话框后,不能操作其他窗口
非模态对话框:打开对话框后,可以操作其他窗口

2.模态和非模态对话框示例

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

//
    /*点击新建按钮弹出一个对话框
     * 对话框分为
     *      模态对话框: 对话框打开后,不可以操作其他窗口
     *      非模态对话框: 对话框打开后,可以操作其他窗口

*/
    connect(ui->actionnew, &QAction::triggered,[=](){
//        模态对话框创建
        QDialog dlg(this);
        dlg.resize(300,200);
//        dlg.exec();
        qDebug() << "模态对话框弹出";

//        非模态对话框创建
        // 将对话框对象创建在栈上,因为它不是阻塞的,改行代码运行结束后栈内存就回收了,所以看不到弹出的对话框
        QDialog dlg2(this);
        dlg2.resize(300,200);
//        dlg.show();

        //将对话框对象创建在堆上,就可以看到对话框。
        QDialog * dlg3 = new QDialog(this);
        /*
         * 创建在对上的对象只有在关闭QWidget窗口时才会回收堆内存对象,如果没有关闭QWidget窗口,一直点击新建再关闭对话框会造成内存泄漏。
         * 使用setAttribute(Qt::WA_DeleteOnClose) 属性可以设置关闭对话框就释放堆内存上的对话框对象。
         */
        dlg3->setAttribute(Qt::WA_DeleteOnClose);
        dlg3->show();
    });


}

MainWindow::~MainWindow()
{
    delete ui;
}


3.标准对话框

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

//
    /*点击新建按钮弹出一个对话框
     * 对话框分为
     *      模态对话框: 对话框打开后,不可以操作其他窗口
     *      非模态对话框: 对话框打开后,可以操作其他窗口

*/
    connect(ui->actionnew, &QAction::triggered,[=](){
//        模态对话框创建
        QDialog dlg(this);
        dlg.resize(300,200);
//        dlg.exec();
        qDebug() << "模态对话框弹出";

//        非模态对话框创建
        // 将对话框对象创建在栈上,因为它不是阻塞的,改行代码运行结束后栈内存就回收了,所以看不到弹出的对话框
        QDialog dlg2(this);
        dlg2.resize(300,200);
//        dlg.show();

        //将对话框对象创建在堆上,就可以看到对话框。
        QDialog * dlg3 = new QDialog(this);
        /*
         * 创建在对上的对象只有在关闭QWidget窗口时才会回收堆内存对象,如果没有关闭QWidget窗口,一直点击新建再关闭对话框会造成内存泄漏。
         * 使用setAttribute(Qt::WA_DeleteOnClose) 属性可以设置关闭对话框就释放堆内存上的对话框对象。
         */
        dlg3->setAttribute(Qt::WA_DeleteOnClose);
//        dlg3->show();
    });

//    标准消息框
//    错误提示框
    QMessageBox::critical(this,"错误提示框","错误");

//    消息框
    QMessageBox::information(this,"消息","消息提示框");

//    警告对话框
    QMessageBox::warning(this,"警告","警告内容");

//    提问框
    /*
     * 参数说明:
     * 参数1:QWidget 对象
     * 参数2:标题
     * 参数3:内容
     * 参数4:对话框按钮名称
     * 参数5:设置默认对话框按钮

     */


     QMessageBox::StandardButton status = QMessageBox::question(this,"提问","提问题",QMessageBox::Help|QMessageBox::Close,QMessageBox::Close);
//     判断用户点击了哪个按钮
     if(status == QMessageBox::Help){
         qDebug() << "点击了帮助";
     }else{
         qDebug() << "点击了取消";
     }

//     颜色提示框
     QColor color = QColorDialog::getColor(QColor(255,0,0));
     qDebug() << "r" << color.red() << "g" << color.green() << "b" << color.blue();

//     文件对话框
//     参数1:父类,参数2:标题,参数3:路径,参数4:过滤器显示指定内容
//     返回值是选择的路径
     QString file = QFileDialog::getOpenFileName(this,"打开文件","/Users/bruce/Downloads","*.png");
     qDebug() << "文件对话框:" << file;

//     字体对话框
     bool flag;
     QFont font = QFontDialog::getFont(&flag,QFont("华文彩云", 36));
     qDebug() << "字体" << font.family() << "字号" << font.pointSize() << "是否加粗" << font.bold() << "是否倾斜" << font.italic();




}

MainWindow::~MainWindow()
{
    delete ui;
}



http://www.kler.cn/a/389778.html

相关文章:

  • wafw00f源码详细解析
  • 如何为电子课程创造创意
  • 操作系统离散存储练习题
  • Rust 建造者模式
  • Vue7种组件之间通信方式
  • Docker入门系列——Docker-Compose
  • 【QT】Qt网络
  • 【CSS】什么是BFC?
  • 2.5_XXE(XML外部实体注入)
  • 杨辉三角-一维数组与二维数组解法
  • 图片搜索引擎,来快速实现一个高性能的本地图片搜索引擎
  • Ansys EMC Plus:以 Touchstone 格式计算和导出 S 参数
  • Web3推动社交媒体的去中心化转型:挑战与机遇
  • FFmpeg —— 通过AES-CTR方式对视频加密解密(详细介绍通过FFmpeg指令、代码方式进行加密解码,附源码)
  • Information Server 中共享开源服务中 kafka 的__consumer_offsets目录过大清理
  • 第二周训练
  • 计算机网络系列课程《网络解释》
  • 【力扣】05最长的回文子串
  • 【C++ 算法进阶】算法提升十四
  • Python之魔术方法笔记
  • Spring Boot集成SQL Server快速入门Demo
  • jsmind 思维导出 vue 示例
  • ArcGIS从Excel表格文件导入XY数据并定义坐标系与投影的方法
  • Rancher的安装
  • JS禁用鼠标滚动条功能且滚动条不消失教程
  • 使用NVIDIA GPU加速FFmpeg视频压制:完全指南