QT模态与非模态

2023-11-11

含义

模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在,又有叫法是称为模式对话框,无模式对话框等。

模态窗体是指:在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭
非模态窗体是指:当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互

使用

1.在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框;另一种是使用show()方法,它使得对话框既可以模态显示,也可以非模态显示,决定它是模态还是非模态的是对话框的modal属性。

2.在Qt中,Qt的模态与非模态对话框选择是通过其属性modal来确定的。modal属性定义如下:

modal : bool默认情况下,对话框的该属性值是false,这时通过show()方法显示的对话框就是非模态的。而如果将该属性值设置为true,就设置成了模态对话框,其作用于把QWidget::windowModality属性设置为Qt::ApplicationModal。 而使用exec()方法显示对话框的话,将忽略modal属性值的设置并把对话框设置为模态对话框。 一般使用setModal()方法来设置对话框的modal属性。

3.如下对话框为模态的方法:

//1.如果要设置为模态对话框,最简单的就是使用exec()方法,示例代码如下:
MyDialog myDlg;    
myDlg.exec();

//也可以使用show()方法,示例代码如下:
MyDialog myDlg;    
myDlg.setModal(true);    
myDlg.show();

//2.如果要设置为非模态对话框,必须使用show()方法,示例代码如下:
MyDialog myDlg; 
myDlg.setModal(false); 

//或者 
myDlg.setModal(); 
myDlg.show();

有时候,我们需要一个对话框以非模态的形式显示,但又需要它总在所有窗口的最前面,可以如下设置:

MyDialog myDlg;    
myDlg.setModal(false);

//或者
myDlg.setModal();    
myDlg.show(); 
//关键是下面这行 
myDlg.setWindowFlags(Qt::WindowStaysOnTopHint); 

在Qt中创建模态对话框,主要用到了QDialog的exec函数:

SonDialog dlg(this); 
int res = dlg.exec(); 
if (res == QDialog::Accepted) 
{ 
    QMessageBox::information(this, “INFORMATION”, “You clicked OK button!”); 
} 

if (res == QDialog::Rejected) 
{ 
    QMessageBox::information(this, “INFORMATION”, “You clicked CANCEL button!”); 
}

正如上代所示,可通过exec函数的返回值来判断用户点击了哪个按钮使得模态对话框退出的,可以使得根据用户的不同行为在退出模态对话框之后采取不同的处理方法 ,我们希望该Qt窗口在退出时自动能够delete掉自己,因此,我们在SonDialog的构造函数里,添加这样的一句代码:

setAttribute (Qt::WA_DeleteOnClose);

这样,我们的SonDialog就能够在它退出时自动的delete掉自己了,不会再造成内存泄漏问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT模态与非模态 的相关文章

  • Qt 是否已经有了自己的 new 和 delete 运算符?

    我正在使用一个QGraphicsScene小部件并在其上显示一些点QGraphicsRectItem 这意味着要拨打很多电话new addItem 当出现时 并且removeItem delete摆脱未使用的点 当然 对于性能问题 我已经实
  • 如何在 QtQuick 2 中对 QML TableView 进行排序?

    我想使用 Qt 5 1 实现具有自定义角色的可排序 TableView 但我不知道当用户单击标题时该怎么做才能对其进行排序 在我的 Qt pro 文件中 我添加了 android ios blackberry qtHaveModule wi
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 在高 dpi Windows 平台上自动重新缩放应用程序?

    我正在编写一个需要在高 dpi Windows 192dpi 而不是 96dpi 上运行的 Qt 应用程序 不幸的是 Qt 框架尚不支持高 dpi 至少在 Windows 上 因此我的应用程序及其所有元素看起来只有应有尺寸的一半 有没有办法
  • 如何向同一个 QMenu 添加多个 QAction?

    我正在尝试实现 Qt 菜单自定义 并且我提供了一个功能来添加相同的功能QAction在同一个人民币上下文菜单中多次 但是当我尝试这样做时 myMenu gt addAction myAction myMenu gt addAction my
  • Qt 安装程序框架 - 如何在卸载时仅删除某些文件和文件夹

    我使用 Qt 安装程序框架 如何确保在卸载时仅删除某些文件或文件夹 而不是像当前那样删除安装文件夹中的所有文件 先感谢您 您可以覆盖默认行为component createOperations对于卸载程序 然后使用手动指定每个卸载路径com
  • 将 QByteArray 从大端转换为小端

    我想我在这里有点不知所措 我尝试了这么简单的事情 我不敢相信没有任何内置的 Qt 使用 Qt 5 6 2 我尝试将 QByteArray 内的数据从大端转换为小端 总是从相同的测试 QByteArray 开始 就像这样 QByteArray
  • 使用 Qt 的网络服务

    我正在寻找使用 Qt 服务器端 实现 Web 服务的代码 如果您有任何信息 我将不胜感激 Regards 您可以使用libqxt http libqxt bitbucket org doc 0 6 qxtweb html实现服务器端Web服
  • 当从 html 文件读取 Unicode 内容时,为什么 Unicode 字体在 QTextBrowser 中无法正确显示?

    我正在读一本html文件 该文件基本上包含Unicode案文如下 b akko sati kru akkh ti khy abbahati b h b But the QText浏览器不解释Unicode字体 所以QText浏览器显示如下
  • QFileInfo::isWritable() 在 Windows 7 上具有完全权限时返回 false

    QFile file filePath QFileInfo fileInfo file file open QIODevice ReadWrite or WriteOnly if fileInfo isWritable Log error
  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • Qt 图表和数据可视化小部件

    我已经安装了 Qt 5 7 来尝试 Qt 图表和 Qt 数据可视化 但我在 Qt Designer 和 Qt Creator 中都找不到新的小部件 有什么建议我应该做什么才能让新的小部件出现在设计器中 我今天遇到了完全相同的问题 默认情况下
  • QML改变图像颜色

    我搜索了如何对图像进行着色 格式为 svg 或 png 我尝试用一 个填充图像的矩形覆盖我的图像 但由于我的图像不是矩形 它会给整个矩形着色 而不仅仅是图像 可以用qml改变图像颜色吗 或者 是否可以使用 QPixmap 更改 qt 使用
  • 如何将flex和bison与Qt项目集成?

    我正在 git 源代码控制下使用 Qt4 制作 GUI 程序 Github页面 https github com vinayak garg dic sim 项目的一小部分需要扫描和解析 所以我想在项目中使用flex和bison 我能想到3种
  • 在Qt中,如何正确实现委托?

    我遵循模型 视图 控制器范例 我很确定模型和视图是正确的 但我认为我的代表做错了一些事情 一切都 有效 除了第一次单击控件只是 点亮控件 而第二次单击与之交互之外 这是代表通常的实施方式吗 我的实现需要大量的构造和销毁 由scoped pt
  • QFileDialog 作为 TableView 的编辑器:如何获取结果?

    我正在使用一个QFileDialog作为某些专栏的编辑QTableView 这基本上有效 对一些焦点问题取模 请参阅here https stackoverflow com questions 22854242 qfiledialog as
  • MSVC C4100:“应用程序”:未引用的形式参数警告

    使用 MSVC 编译时 以下代码会生成 C4100 警告 这怎么可能 显然引用了 应用程序 class ApplicationInfo public QObject Q OBJECT public static void initializ
  • 为什么anchors.centerIn不适用于Column元素?

    我有这段 QML 代码 Column spacing units gu 2 anchors fill parent centerIn parent Row spacing units gu 4 Row spacing units gu 4
  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199

随机推荐

  • wpf自定义控件之双滑块Slider

    效果
  • 【FPGA】五、蜂鸣器播放音乐

    文章目录 前言 一 蜂鸣器简介 二 音频音符简介 三 任务要求 四 程序设计 1 设计思路 2 程序代码 总结 前言 蜂鸣器 Buzzer 是现代常用的一种电子发声器 主要用于产生声音信号 它是一种一体化结构的电子讯响器 采用直流电压供电
  • Python手册(Visualise)--seaborn

    文章目录 数据集 关系图 核心函数 散点图 折线图 分面图 分布图 核心函数 直方图 核密度估计 经验累积分布 地毯图 二元分布 分类图 核心函数 散点图 分布图 统计图 回归图 矩阵图 热力图 聚类图 网格图 分面网格 配对网格 联合网格
  • blockchain java_blockchain-java(简易区块链项目)

    blockchain java 简易区块链项目 是基于Java实现的一个简易区块链 联盟链 项目 包括加密工具 钱包 P2P 传输 区块同步 POW 共识等基础实现 使用方法 单节点部署 这个很简单 直接像运行普通的 SpringBoot
  • d3dUtility.cpp 统一回答:在vs2015中调试D3D9龙书 代码示例:4.4 d3dUtility.cpp

    龙书d3d9的代码 在作者的资源中 可查找 免分 注意 如果可能的话 请先安装DXSDK Jun10 exe 然后再安装VS2010或VS2015 否则 会在安装DXSDK Jun10 exe的过程的最后阶段会报错 不过 即使是报错 也不影
  • <稀缺-我们是如何陷入贫穷与忙碌的> 摘要

    2015 07 08 10 12 lt 稀缺 我们是如何陷入贫穷与忙碌的 gt 摘要 这本书分析了稀缺的内在来源和所造成的影响 列举了许多例子 下面我把它的核心思想记录一下 稀缺心态是一切稀缺的根源 资源稀缺并不可怕 就怕有稀缺心态 以后简
  • Ubuntu20.04下显卡驱动安装的完整过程(超详细)

    1 首先查看硬件 显卡是否安装 lspci grep i vga lspci grep i nvidia 注意 如果没显示显卡信息则看显卡是否安装好 看下显卡风扇是否在转 图中是显卡位置 然后再执行上面的命令 确定显卡安装没问题了之后 再看
  • VMware Workstation无法提供该虚拟机所需的所有图形功能

    报错信息 VMware Workstation无法提供该虚拟机所需的所有图形功能 在该虚拟机引导后 图形硬件 图形驱动程序或Vware软件版本可能已发生变化 该虚拟机将继续运行 但在关闭该虚拟机之前 某些图形操作可能会出现不可预见的行为 原
  • replace将逗号换成分好 vue_使用replace()方法替换一段文字中的某一个字符串

    一 replace 方法的第二个参数为字符串时 1 第一个参数为字符串 替换匹配到的第一个字符串 var str 段落这是一个段落 str replace 段落 段落 2 第一个参数为正则表达式时 替换所有匹配到的字符串 var str 段
  • 电脑连接不上网络(梯子原因)

    1 问题描述 2 具体原因 使用梯子造成的 具体原因没有深究 3 解决办法 控制面板 网络和Internet Internet选项 连接 局域网设置 在代理服务器处取消勾选为LAN使用代理服务器 这些设置不用于拨号或VPN连接 X
  • react-draggable实现拖拽详解

    react draggable 属性 常用属性 属性列表 事件列表 举例 首先安装 react draggable 实现移动 希望小编写的能够帮助到你 属性 常用属性 属性 默认值 介绍 axis x handle拖动的方向 可选值 x y
  • Abbirb120型工业机器人_ABB机器人IRB120资料的详细介绍

    ABB机器人IRB120资料的详细介绍 在工业4 0时代 越来越多机器人投身于生产一线 ABB机器人作为全球 的机器人品牌 受到众多企业的关注 近期有很多朋友都在质疑abb IRB120这个型号的机器人性能如何 接下来就由专业人士为大家带来
  • dialog BLE SDK 学习(3)

    dialog DA14580 SDK版本 5 0 4 本文介绍了DA14580 SDK的学习感想和建议 分享给大家 首先 Dialog官网上的资料挺全的 但是是英文的 如果英文不好 比如笔者 阅读起来是件痛苦的事情 资料都挺好的 唯一的不足
  • 华为手机怎么连接苹果电脑?

    华为手机怎么连接苹果电脑 https zhidao baidu com question 1946793458712978108 html 连接之后 在mac上面进行安装dmg文件 然后就有了一个读取android文件的应用 然后就可以查看
  • C#初级知识——List和Dictionary(一些笔记)

    C 初级知识 List和Dictionary 一些笔记 文章目录 C 初级知识 List和Dictionary 一些笔记 前言 一 什么是集合结构 二 List集合 1 介绍 2 语法相关 1 创建List泛型集合 2 集合数据操作 3 L
  • linux安装tcpdump

    1 官网下载tcpdump和libpcap压缩包 登录 https www tcpdump org index html latest releases 2 安装相关依赖库 1 yum y install gcc c 2 yum y ins
  • QT ui设计师界面常用操作记录(QTabWidget)

    目录 1 QTabWidget 怎么删除已加入的tab页 怎么修改tab页的名字 1 QTabWidget 怎么删除已加入的tab页 如图所示原来有四个 现在我要删除两个 直接在你要删除的tab页右键 会出现两个选项 选择删除 即可删除 完
  • 2021年四川省大学生网络安全技能大赛EZSQL

    题目一 EZSQL 操作内容 考点 MYSQL8新特性 fuzz之后发现 只能盲注 过滤了select 使用1 and ascii substr database 1 1 gt num 可以盲注出数据库 但是后面就搞不动了 无select注
  • Derby数据库简介

    一 Derby 数据库介绍 Apache Derby 是一个完美的 100 Java 编写的内存数据库 属于 Apache 的一个开源项目 并且是一个容易管理的关系数据库管理系统 可以和一些商业产品的特性进行交付 Apache Derby
  • QT模态与非模态

    含义 模态对话框 Modal Dialog 与非模态对话框 Modeless Dialog 的概念不是Qt所独有的 在各种不同的平台下都存在 又有叫法是称为模式对话框 无模式对话框等 模态窗体是指 在其没有被关闭之前 用户不能与同一个应用程