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

embedded/2024/11/14 12:48:32/

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.ppmy.cn/embedded/136441.html

相关文章

Risc-v:mhartid寄存器

简介 mhartid&#xff08;Machine Hart ID Register&#xff09;是 RISC-V 架构中的一个控制和状态寄存器&#xff08;CSR&#xff09;&#xff0c;用于存储当前硬件线程&#xff08;hart&#xff09;的标识符。 在多核处理器中&#xff0c;每个核心可能有一个或多个硬件线程&a…

页面上的内容的生成图片后,保存为word,并下载

页面上的内容的生成图片后&#xff0c;保存为word&#xff0c;并下载 juqery <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Download Page Screenshot as Word</title><script src"h…

el-scrollbar 动态更新内容 鼠标滚轮无效

有以下功能逻辑&#xff0c;实现了一个时间轴组件&#xff0c;点击、-号后像地图那样放大组件以显示不同的UI。 默认显示年月&#xff1a; 当点击一下加号时切换为年&#xff1a; 当点击减号时切换为日&#xff1a; 即加号、减号点击就是在年月日显示进行切换。给Scrollvie…

Java并发无锁篇--乐观锁(非阻塞)

共享模型之无锁 问题提出 package com.zjy.unlock;import java.util.ArrayList; import java.util.List;public class AccountDemo {public static void main(String[] args) {Account account new AccountUnsafe(10000);Account.demo(account);} }class AccountUnsafe impl…

java.lang.NoClassDefFoundError: org/springframework/aot/AotDetector问题解决

原因&#xff1a;mybatis版本问题 由于项目需要部署服务器上&#xff0c;需要将一系列依赖进行升级 到mybatis时&#xff0c;会出现这个问题 参考mybatis-spring官网可以看到mybatis-spring mybatis、mybatis-spring、spring依赖和jdk版本不对应&#xff0c;因此爆错 解决方法&…

ML 系列:机器学习和深度学习的深层次总结( 20)— 离散概率分布 (Bernoulli 分布)

一、说明 离散概率分布&#xff0c;最早的杰出任务是贝努力&#xff0c;而贝努力分布是最早的离散概率模型&#xff0c;至今依然是重要的概率理论&#xff0c;在物理学的热力学、量子理论均有巨大意义。 雅各布伯努利 &#xff08;Jacob Bernoulli&#xff09; 是一位杰出的数学…

编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用

往期内容 本专栏往期内容&#xff1a; Pinctrl子系统和其主要结构体引入Pinctrl子系统pinctrl_desc结构体进一步介绍Pinctrl子系统中client端设备树相关数据结构介绍和解析inctrl子系统中Pincontroller构造过程驱动分析&#xff1a;imx_pinctrl_soc_info结构体Pinctrl子系统中c…

CycleGAN算法简述

1. 简介 CycleGAN是一种图像到图像的翻译模型&#xff0c;旨在无配对训练数据的情况下完成跨域图像转换。传统方法需要成对的输入-输出数据&#xff0c;但这种配对数据的获取往往代价高昂且难以实现。CycleGAN通过使用无配对数据的训练策略&#xff0c;实现从一个图像域到另一…