第三篇:对话框窗口部件 QDialog

news2025/1/14 18:31:13

对话框窗口部件 QDialog

对话框(Dialog)是计算机图形用户界面(GUI)中的一种常见窗口类型,通常用于与用户进行交互、获取信息、提供反馈或执行特定任务。对话框的主要目的是与用户进行短期的、有限的交互,以完成特定的操作或任务,然后将控制返回给应用程序的主窗口或上下文。

模态与非模态对话框

按照运行对话框时是否还可以和该程序的其他窗口进行交互,对话框常被分为两类:模态(model)和非模态(modeless)。

模态对话框(model dialog)

模态对话框阻塞了应用程序的主窗口或其他父窗口,直到用户完成对话框中的操作或关闭对话框。用户必须在对话框上完成交互后才能继续与应用程序交互。典型的模态对话框包括文件选择框、消息框、设置对话框等。

方法 1:exec()

QDialog dlg();
dlg.exec();

此方法实现的为全模态对话框,不仅会阻塞应用程序窗口,当调用 exec() 函数时,代码将不会继续向下执行,只有当对话框关闭才会返回。

方法 2:setModel()

QDialog dlg();
dlg.setModel(true);
dlg.show();

此方法实现的为半模态对话框,只会阻塞应用程序窗口,代码仍然继续向下执行。

方法 3:setWindowModality()

QDialog dlg();
dlg.setWindowModality(Qt::ApplicationModal);
dlg.show();

使用此方法实现的模态对话框也是半模态的。

setWindowModality()的参数设置要阻塞的窗口类型:

枚举值说明
Qt::NonModal0非模态,不阻塞任何窗口
Qt::WindowModal1模态,阻塞它的父窗口,所有的祖先窗口以及他们的子窗口
Qt::NonModal2模态,阻塞应用程序所有的窗口

非模态对话框(modeless dialog)

非模态对话框与应用程序的其他部分同时存在,用户可以在对话框和主窗口之间自由切换。用户可以同时打开多个非模态对话框,而不必等待一个对话框完成才能处理其他任务。典型的非模态对话框包括查找和替换对话框。

QDialog dlg();
dlg.show();

标准对话框

Qt 提供了一些常用的对话框类型,它们全部继承自 QDialog 类,并增加了自己的特色功能,例如颜色、文件、字体、输入、提示、进度对话框等。此处只列举颜色、文件对话框和消息对话框,其余留给你自己练习!

颜色对话框

颜色对话框类 QColorDialog 提供了一个可以获取指定颜色的对话框部件。

#include <QColorDialog>

QColor color = QColorDialog::getColor(Qt::red, nullptr, QObject::tr("颜色对话框"));
qDebug() << "color" << color;

QColorDialog::getColor 的 3 个参数分别是:设置初始颜色、指定父窗口和设置对话框标题。

运行结果如图:

在这里插入图片描述

其实 QColorDialog::getColor 函数声明是这样的:


QColor 
getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions())

聪明的你可能已经发现了,这不是 4 个参数吗?咱咋没用呢?

options 是指定影响颜色对话框外观的各种选项,QColorDialog::ColorDialogOption 具体见下表:

枚举值说明
QColorDialog::ShowAlphaChannel1允许用户选择颜色的alpha组件
QColorDialog::NoButtons2不显示“确定”和“取消”按钮。(对于”live dialog”很有用。)
QColorDialog::DontUseNativeDialog4使用Qt的标准颜色对话框,而不是操作系统的本机颜色对话框

接下来我们使用 QColorDialog::ShowAlphaChannel 来显示 alpha 设置。运行程序查看结果如图所示:

在这里插入图片描述

文件对话框

文件对话框 QFileDialog 类提供了一个允许用户选择文件或文件夹的对话框。

#include <QFileDialog>

QString fileName = QFileDialog::getOpenFileName(nullptr, QObject::tr("Open File"), "D:\\", QObject::tr("文本文档(*.txt)"));
qDebug() << "fileName:" << fileName;

QFileDialog::getOpenFileName 的 4 个参数的作用分别是:指定父窗口、设置对话框标题、指定默认打开目录路径和设置文件类型过滤器。

运行结果如图:

在这里插入图片描述

其实 QFileDialog::getOpenFileName 函数声明是这样的:

QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

selectedFilter 用于存储用户选择的过滤器的名称,可以设置默认选择哪种过滤器。
options 用于指定对话框的选项。详见 QFileDialog::Options 枚举。

注意:getOpenFileName() 只能选择单一文件,要同时选择多个文件,则可以使用 getOpenFileNames() 函数。

消息对话框

消息对话框 QMessageBox 类提供了一个模态的对话框来通知用户一些信息,或者向用户提出一个问题并且获取答案。

// 提示对话框
int ret = QMessageBox::information(nullptr, QObject::tr("提示"), QObject::tr("这是一个提示对话框"), QMessageBox::Ok);
if (ret == QMessageBox::Ok)
    qDebug() << QObject::tr("提示");

// 警告对话框
int ret2 = QMessageBox::warning(nullptr, QObject::tr("警告"), QObject::tr("这是一个警告对话框"), QMessageBox::Abort);
if (ret2 == QMessageBox::Abort)
    qDebug() << QObject::tr("警告");

// 错误对话框
int ret3 = QMessageBox::critical(nullptr, QObject::tr("错误"), QObject::tr("这是一个错误对话框"), QMessageBox::YesAll);
if (ret3 == QMessageBox::YesAll)
    qDebug() << QObject::tr("错误");

// 关于对话框
QMessageBox::about(nullptr, QObject::tr("关于"), QObject::tr("这里是bmseven的博客"));

// 提问对话框,带有Yes和No按钮
QMessageBox::StandardButton reply;
reply = QMessageBox::question(nullptr, QObject::tr("提问"), QObject::tr("你确定要执行此操作吗?"),
                                QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
    qDebug() << QObject::tr("用户选择了Yes。");
} else {
    qDebug() << QObject::tr("用户选择了No。");
}

运行结果如图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里创建了 5 个不同类型的消息对话框,分别拥有不同的图标和提示音(这个是操作系统设置的),几个参数分别用于设置父窗口、标题栏、显示信息和拥有的按钮。

这里使用的都是 QMessageBox 类提供的标准按钮。返回值也都是 QMessageBox::StandardButton 枚举类型的值,唯独关于对话框 about() 函数没有返回值,因为它默认只有一个按钮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/917053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【校招VIP】产品职位理解之团队的配合和推进

考点介绍&#xff1a; 对于简历上有实习经验的同学&#xff0c;对于团队配合和项目推进是一个非常常见的提问点。产品经理经常会面临项目延期&#xff0c;无法上线的情况。基于此&#xff0c;产品经理应该做些什么来保障项目按时上线呢&#xff1f; 『产品职位理解之团队的配合…

THUHCSI人机语音交互实验室9篇论文被语音旗舰国际会议INTERSPEECH录用

2023年ISCA国际语音通讯学会年会&#xff08;2023 Annual Conference of the International Speech Communication Association, INTERSPEECH 2023&#xff09;将于2023年8月20日-24日在爱尔兰都柏林召开&#xff0c;清华大学人机语音交互实验室&#xff08;THUHCSI&#xff09…

视频监控平台EasyCVR视频汇聚平台档案库房图书馆等可视化管理平台应用场景全面解析

档案是一种特殊的记录留存文献&#xff0c;具有珍贵的精神财富价值。它们是人类活动的真实见证&#xff0c;是辉煌时刻的历史记录&#xff0c;在社会发展和经济建设中发挥着至关重要的作用。 随着市场经济的不断发展和人类文明的飞速推进&#xff0c;档案的价值和作用变得越来…

【广州华锐互动】VR工厂消防安全演习提供了一种全新、生动的安全教育方式

在工业生产环境中&#xff0c;安全永远是首要的考虑因素。近年来&#xff0c;随着科技的发展&#xff0c;虚拟现实(VR)技术在各种领域的应用越来越广泛&#xff0c;包括教育和培训。其中&#xff0c;VR工厂消防安全演习就是一个典型的例子&#xff0c;它为员工提供了一种全新的…

msvcr120.dll丢失的解决方法,win10系统dll报错解决方法

今天&#xff0c;我将和大家分享一个在win10系统中经常遇到的问题&#xff1a;msvcr120.dll丢失。相信很多朋友在使用电脑的过程中都会遇到这个问题&#xff0c;那么如何解决呢&#xff1f;接下来&#xff0c;就让我为大家详细讲解一下解决方法。 首先&#xff0c;我们来了解一…

基于Spark+django的国漫推荐系统--计算机毕业设计项目

近年来&#xff0c;随着互联网的蓬勃发展&#xff0c;企事业单位对信息的管理提出了更高的要求。以传统的管理方式已无法满足现代人们的需求。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;随着各行业的不断发展&#xff0c;基…

pdf怎么转换成图片?用这几种简单方法搞定

pdf怎么转换成图片&#xff1f;PDF作为一种通用的文档格式&#xff0c;广泛应用于各个领域。然而&#xff0c;在某些情况下&#xff0c;我们可能需要将PDF文件转换成图片格式&#xff0c;以便更方便地在网页、社交媒体或演示中使用。下面就给大家介绍三种简单而高效的方法来实现…

基于swing的旅游管理系统java jsp旅行团信息mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的旅游管理系统 系统有1权限&#xff1a;管…

【Win】Dell Command PowerShell Provider 一款强大的IT工具

Dell Command | PowerShell Provider 是一款强大的IT工具&#xff0c;它允许用户通过 Windows PowerShell 界面轻松管理 Dell 硬件平台的 BIOS 配置。它提供了一系列的 PowerShell cmdlets命令&#xff0c;这些命令可以帮助 IT 管理员对 Dell 硬件平台进行 BIOS 配置的控制和管…

【ES6】—【必备知识】—扩展运算符与rest参数

一、扩展运算符 1. 定义&#xff1a;把数组或类数组展开成用逗号隔开的值 function foo(a,b,c) {console.log(a,b,c) } let arr [1,2,3] foo(...arr)2. 把两个数组合并 2-1. ES5 实现 let arr1 [1,2,3] let arr2 [4,5,6] Array.prototype.push.apply(arr1, arr2) consol…

【PHP】文件包含-includerequire

文章目录 文件包含意义&#xff1a;四种形式文件加载原理include和require的区别文件的加载路径文件嵌套包含 文件包含 文件包含&#xff1a;在一个PHP脚本中&#xff0c;去将另外一个文件&#xff08;PHP&#xff09;包含进来&#xff0c;去合作完成一件事情。 意义&#xf…

sql递归查询

一、postgresql 递归sql with recursive p as(select t1.* from t_org_test t1 where t1.id2union allselect t2.*from t_org_test t2 join p on t2.parent_idp.id) select id,name,parent_id from p; sql中with xxxx as () 是对一个查询子句做别名&#xff0c;同时数据库会对…

【计算机视觉】递归神经网络在图像超分的应用Deep Recursive Residual Network for Image Super Resolution

DRCN: Deeply-Recursive Convolutional Network for Image Super-Resolution 总结 这篇文章是第一次将之前已有的递归神经网络(Recursive Neural Network)结构应用在图像超分辨率上。为了增加网络的感受野&#xff0c;提高网络性能&#xff0c;引入了深度递归神经网络&#x…

Unity脚本常用生命周期

Unity脚本在Unity引擎运行时会经历多个阶段的变化。如创建&#xff0c;初始化&#xff0c;按帧执行&#xff0c;固定执行&#xff0c;绘制&#xff0c;禁用&#xff0c;销毁等等。具体如下图所示&#xff1a; 我们创建脚本时都是默认继承了MonoBehaviour类&#xff0c;而MonoBe…

【文心一言】如何申请获得体验资格,并简单使用它的强大功能

目录 一、文心一言1.1、它能做什么1.2、技术特点1.3、申请方法 二、功能体验2.1、文心一言2.2、写冒泡排序代码 测试代码2.3、画一个爱心2.4、画一个星空 三、申请和通过3.1、申请时间3.2、通过时间 文心一言&#xff0c;国内首个大型人工智能对话模型&#xff0c;发布已经快一…

直播APP开发,协议盘点(五):实时传输协议RTP

简介&#xff1a; 在直播APP开发的过程中&#xff0c;搭建协议实现相应的功能是开发重点之一&#xff0c;而直播APP开发的协议是繁多且复杂的&#xff0c;所以从前段时间开始&#xff0c;我做了直播开发的协议篇&#xff0c;到今天为止我已经分享了四个协议&#xff0c;下面我为…

3DXML在线查看与转换工具

3DXML 由软件巨头达索系统推出&#xff0c;是 3D 设计和工程中的关键文件格式&#xff0c;提供了封装和共享 3D 数据的系统方法。 为了将简单性与丰富的数据表示相结合&#xff0c;3DXML 在与 STEP 等其他文件格式相比时展现出其独特的优势&#xff0c;特别是在数据丰富性和紧凑…

【已解决】Authenticator:无法添加账户请验证激活代码是否正确以及您的设备是否已为此应用启用推送通知

问题&#xff1a; 小米手机的Authenticator添加微软账户扫描QR码提示&#xff1a;无法添加账户请验证激活代码是否正确以及您的设备是否已为此应用启用推送通知 解决办法&#xff1a; 1、在通知管理中允许Authenticator所有通知。 2、在手机设置-账户与同步里找到谷歌基础服…

基于SSM的bbs聊天论坛java jsp贴吧留言板聊天室mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于SSM的bbs聊天论坛 系统有2权限&#xff1a;前台、…

测试框架pytest教程(3)夹具-@pytest.fixture

内置fixture Fixture使用pytest.fixture装饰&#xff0c;pytest有一些内置的fixture 命令可以查看内置fixture pytest --fixtures fixture范围 在pytest中&#xff0c;夹具&#xff08;fixtures&#xff09;具有不同的作用范围&#xff08;scope&#xff09;&#xff0c;用于…