Qt实现 模态对话框以及窗口置顶

QT实现窗口置顶、置顶状态切换、多窗口置顶优先关系 我们使用QT进行界面开发时,可能会遇到需要将窗口置顶的情况。最常见的就是,需要制作一个悬浮工具栏,悬浮菜单,甚至是悬浮的画板。这就意味这我们需要将这个窗口置顶于“系统”以及我们自己“软件”的窗口之上。 其实实现的方法很简单,就是在创建这个窗口类的时候,在构造函数中的加一个Qt::WindowFlags 枚举标识 Widget::Widget(QWidget *parent) : QWidget(parent,Qt::Widget | Qt::WindowStaysOnTopHint) , u 阅读详情

一、模态对话框和非模态对话框的概念

1、模态对话框,就是当其弹出后,会置于窗口最上层,软件的其他窗口无法接受用户点击和输入,只有其在被关闭后,其他窗口才能继续和用户交互。模态对话框的应用场景广泛,比如弹出式参数设置对话框,需要确保用户手动确定或者关闭。比如windows里的环境变量窗口:

这时候如果不点击确定或者取消以及右上角的关闭,我们就无法点击系统属性窗口。

2、非模态对话框,它弹出后,软件的其他窗口仍能与用户交互,比如以下:

点击了高级系统设置,弹出系统属性窗口,仍然能对系统窗口做操作,

所以系统属性窗口相对于系统窗口而言,就是非模态对话框。

二、在Qt中,通常是使用QDialog或者QWidget作为弹出式窗口

以下分别对二者如何设置模态做一个比较和结论。

如果是QDialog:

1、通过以下语句设置,即为模态,父对象地址传入与否,不影响模态的效果。

QDialog dialog(this);
dialog.exec();

2、或者通过show()函数,前提是需要通过setModal()设置为模态。

QDialog *dialog = new QDialog(this);
dialog->setModal(true);
dialog->show();

如果是QWidget:

QWidget需要调用setWindowMondality()函数来设置模态属性,否则默认为非模态。

QWidget *w = new QWidget(this);
w->setWindowModality(Qt::ApplicationModal);

setWindowMondality()函数接受枚举值以设置不同的效果,分别是:

Qt::ApplicationModal 表示该窗口阻塞程序的所有窗口。

Qt::WindowModal 表示阻塞它的父窗口,所有祖先窗口以及它们的子窗口。

Qt::NonModal 表示不阻塞任何窗口,就是非模态。

三、Qt窗口置顶显示的两种方式

_dock->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Dialog);

SetWindowPos(reinterpret_cast<HWND>(_dock->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

窗口置顶表示该窗口位于一切窗口之上,其他的窗口拖过来,也会被其遮挡。

Qt-QDialog非模态置于窗口之上且操作主窗口不隐藏dialog的方法 将当前widget提升到parent widget stack的最顶层,这使我们在操作其他窗口时,也能保持dialog显示在其他窗口的上方而不会被遮盖住。方法会重置其windowFlags,因此我们将其原始windowFlags传入作为参数以保留原始属性。不传入将导致dialog显示异常。以非模态显示dialog,是我们能操作dialog以外的其他窗口。QDialog继承自QWidget, 阅读详情

相关推荐

Qt setWindowFlags(Qt::Window)功能代码解析 非模态窗口且窗口置顶

如果需要让一个窗口支持模态和非模态窗口,一般是需要将改窗口设置为QDailog, 实现该功能的一个关键点是设置了setStyleSheet(Qt::Window),源码如下: Widget = 0x00000000, Window = 0x00000001, Dialog = 0x00000002 | Window, Qt::...

a1317338022的博客 2121

Qt篇——让已经显示的QDialog对话框出现在最前面

当非模态的QDialog对话框在show()显示之后,由于人为点击将主界面切换到最上层显示后,对话框就被主界面遮挡了,如果想要在代码中重新将对话框显示在最前面,我们可以使用raise()+activateWindow()这两个函数来实现。

u011391361的博客 1545

Qt QGridLayout bug

如果需要让一个窗口支持模态和非模态窗口,一般是需要将改窗口设置为QDailog, 实现该功能的一个关键点是设置了setStyleSheet(Qt::Window),源码如下: Widget = 0x00000000, Window = 0x00000001, Dialog = 0x00000002 | Window, Qt::...

a1317338022的博客 763

Qt 弹窗保持在最上方

在使用Qt进行开发时,经常需要弹出窗口,一般常见的是需要以下两种:第一种:锁定弹出窗口,阻塞其他窗口(包括主窗口)的操作,只有关闭当前的窗口才能点击其他窗口或者主窗口。第二种:保持当前窗口一直显示在最顶层,但是不锁定(即同时可以操作其他窗口),同时也不影响其他程序。

love_dear的博客 8772

QT QDialog模态对话框与非模态对话框 (setModal)

QT QDialog模态对话框与非模态对话框 (setModal) 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等。所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和

IT---庸才 的博客 2万+

Qt:模态对话框和非模态对话框

模态对话框及非模态对话框(详情见课本P51)。 模态对话框:在没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。 非模态对话框:当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。 非模态对话框(Modeless Dialog)的概念是一个概念,不仅仅Qt中具有,在其他不同的平台下 也都存...

桃花扇 2万+

界面可视化(十一):PyQt5窗口在linux置顶无效

为工具做一个悬浮窗口,使其在开启时,永远处于电脑所有的窗口的前方。 博客1:PyQt5 技巧篇-窗口置顶设置,如何使窗口始终显示在最前面 博客2: pyqt5窗口相关设置 只需要使用一行代码: Dialog.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) 该方法经过测试,在window系统中可以实现,效果为: 当子窗口浮现在主窗口之前时,...

weixin_41068770的博客 1386

qt设置窗口置顶_Qt保持窗口在最上方

前言在Qt开发桌面软件的过程中,根据开发的需求不同,我们经常需要将弹出窗口,一般常见的是需要是以下两种。锁定弹出的窗口,阻塞其他窗口(包括主窗口)的操作,只有关闭当前窗口才能点击其他窗口或者主窗口保持当前窗口一直显示在最顶层,但是不锁定(即同时可以操作其他窗口),同时也需要保证不影响其他程序知识准备首先我们需要了解一下 QMainWindow、QWidget、QDialog 的区别。具体可以看以下...

weixin_39950552的博客 9372

QWidget实现模态对话框的效果

QT用QWidget实现类似QDialog::exec()模态对话框的效果

SkylineR36的博客 903

第08课:子窗口交互

用 open 方法打开的子窗口也会面临和其他窗口交互的问题,交互无外乎互相传递数据,并接收其他窗口传递过来的数据。 8.1 最简单的传递接收数据 向 open 方法创建的子窗口传递数据有多种方法,其中之一就是使用 BrowserWindowProxy.postMessage 方法,该方法可以向指定的窗口传递任意类型的数据和来源(origin),如果不知来源,可以使用星号 '*' 代替,关于来源是什...

一个被知识诅咒的人 1305

Xilinx Blockset Counter计数器模块使用及参数配置

本文详细介绍了Simulink中Xilinx Blockset库Counter模块的使用以及参数说明。

白码王子小张的博客 1094

QT的setwindowflags的属性总结

setWindowFlags(Qt::CustomizeWindowHint);//设置窗口标题栏自定义 setWindowFlags(Qt::WindowMinimizeButtonHint);//设置窗口的标题栏只有最小化的按钮 setWindowFlags(Qt::WindowCloseButtonHint );//设置窗口的标题栏只有关闭的按钮 setWindowFlags(Qt::WindowStaysOnTopHint);//设置窗体一直置顶,并且不会抢焦点 this->...

carrots_rabbit的博客 1469

SAP财务凭证实战:如何用Coding Block快速添加客户化字段(附ABAP代码)

本文详细介绍了在SAP财务凭证中利用Coding Block技术快速添加客户化字段的完整流程,包括技术架构解析、实战配置步骤(OBC4/OB41)及ABAP增强开发。通过案例演示如何高效扩展字段(如增长曲线类型),实现全流程集成且无需修改数据表,显著提升财务凭证的灵活性和可追溯性。

weixin_29271263的博客 225

【QT】的setwindowflags属性

QT的setwindowflags的属性总结 :setWindowFlags(Qt::CustomizeWindowHint);//设置窗口标题栏自定义 setWindowFlags(Qt::WindowMinimizeButtonHint);//设置窗口的标题栏只有最小化的按钮 setWindowFlags(Qt::WindowCloseButtonHint );//设置窗口的标题栏只有关闭的按钮 setWindowFlags(Qt::WindowStaysOnTopHint);//设置窗体一直.

qq_37016048的博客 817

无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)

LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模拟与智能工况分析,为下一代eVTOL技术提供全维度验证工具。采用航空级应变传感器(精度±0.1% FS),同步捕获推力、扭矩、俯仰/滚转力矩,动态误差<1%。同时测试电驱动系统(单轴最大150kW)与混合动力单元(增程式),支持高压(800V)平台。通过MET数据采集软件,控制采集一体化,定制化,实时观察上百个传感器数据,实时更改测试需求。可搭配六维姿态平台,温湿度舱、振动台等环境模拟设备。

weixin_49209795的博客 874

PlutoSDR驱动安装避坑指南:从设备管理器异常到MATLAB 2023b完美识别

本文是一份详细的PlutoSDR驱动安装与MATLAB 2023b集成排错指南。针对Windows系统下常见的设备管理器异常、驱动兼容性问题,提供了从旧驱动清理、手动指定驱动文件到USB连接稳定性排查的完整解决方案。重点阐述了如何通过离线安装硬件支持包,并利用MATLAB命令进行连接测试与射频信号验证,最终实现设备的完美识别与稳定调用。

weixin_29159441的博客 427

【Qt开发】Qt窗口(五) -> 非模态/模态对话框

本文对比分析了Qt中的模态对话框和非模态对话框的特性与应用。模态对话框采用阻塞式交互,强制用户完成当前任务,适用于关键操作确认和重要决策场景;非模态对话框则支持并行操作,适用于工具面板和进度显示等辅助功能。文章从行为机制、内存管理、用户体验等维度深入比较两者的差异,并提供了代码示例和设计最佳实践,帮助开发者根据具体需求合理选择对话框类型,以优化用户交互体验。

枫叶丹4的博客 2384

(王道408考研操作系统)第三章内存管理-第一节1:内存基础知识、程序编译运行原理

注意:本节内容和《计算机组成原理》“存储器”那一部分内容相关性很强,组成原理是从硬件角度,操作系统是从软件角度。因此如果没有学习过这部分的同学,强烈建议先看这一部分 王道计算机组成原理笔记 本文主要会涉及以下必要的内存知识 文章目录一:内存及其作用 一:内存及其作用 内存:内存又称之为主存。是一种硬件设备,作为CPU和硬盘的缓冲区,用于解决其速度不匹配的问题,提高整机性能。程序执行前需要放入内存才能运行 ...

快乐江湖的博客 2790

Qt模态对话框与非模态对话框

自定义QWidget对话框,如果通过函数设置了对话框的显示设置后,会导致该对话框在模态显示的时候如果设置了父窗口指针,会导致模态的设置无效,这时需要在该函数中加一个参数Qt::Dialog就可以了。w.setWindowTitle("DefineDialog模态无效");//指定父窗口//设置模态dfg.show();w.show();

m0_71489826的博客 2241

详解Linux下使用vscode编译运行和调试C/C++

本教程将具体详解使用Visual Studio Code在Linux环境下使用C/C++方法。 GCC C++ 编译器 (g++) 和 GDB 调试器的方法。 GCC是GNU 编译器集合; GDB 是 GNU 调试器。 1.先决条件 安装Visual Studio Code. 安装C++拓展插件。点击在vscode界面最左侧的Extensions图标(打开快捷键:ctrl+shift+X),搜索“C/C++”,点击进行安装。 确保已安装gcc. 一般ubuntu系统会预装gcc.在终端窗口中输入如下命令

休的博客 6240

论文阅读:2024 ACM CCS “Do Anything Now”: Characterizing and Evaluating In-The-Wild Jailbreak Prompts on

大语言模型(LLMs)的滥用问题引起了公众和大语言模型供应商的高度关注。有一种特殊的对抗性提示,叫做越狱提示,它已成为绕过防护措施、让大语言模型生成有害内容的主要攻击手段。在这篇论文中,作者使用新框架JailbreakHub,对2022年12月至2023年12月期间的1405个越狱提示进行了全面分析。作者识别出131个越狱提示社区,发现了越狱提示的独特特征以及主要攻击策略,比如提示注入和权限提升。

CSPhD-winston的博客 1411

QT中的模态对话框及非模态对话框

模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等。所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。 在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框;另一种是使用show()方法,它使得对

u011555996的博客 4184

Jetson AGX Orin和Drive AGX Orin相机的关联分析和编程指南

通过适当的相机接口和连接,以及使用适当的软件开发环境,开发人员可以在这些平台上实现相机功能。Jetson AGX Orin和Drive AGX Orin是NVIDIA推出的两款强大的计算平台,用于自动驾驶和人工智能应用。Jetson AGX Orin和Drive AGX Orin平台提供了强大的计算能力,使开发人员能够实现复杂的相机功能和算法。以上只是一些示例,Jetson AGX Orin和Drive AGX Orin平台提供了丰富的开发资源和工具,可用于实现各种复杂的相机应用。显示图像在一个窗口中。

CyberLynxO的博客 1119

QT弹出对话框永远在父窗口上面,但是不影响父窗口交互

模态对话框会阻塞父窗口的交互 置顶对话框不影响父窗口的交互,但是也会显示在其他窗口上面,导致同一个程序,多个窗口发生分层的效果 要想永远在父窗口上面且不影响父窗口的交互,可以使用Qt::Tool属性 QWidget*p = new QWidget(this); p->setWindowFlags(p->windowFlags() | Qt::Tool); p->resiz...

youyudexiaowangzi的专栏 6651

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Qt—模态与非模态对话框

文章摘要:Qt中的对话框分为模态和非模态两种类型。模态对话框强制用户优先处理当前窗口,阻塞特定范围的用户交互,分为应用级模态、窗口级模态和伪模态。应用级模态阻塞整个应用程序,窗口级模态仅阻塞父窗口及其子窗口,伪模态则允许后台代码继续执行。非模态对话框允许用户自由切换窗口,无交互阻塞。实现时需注意内存管理、UI响应性、模态类型选择和线程安全等问题。典型应用场景包括关键操作确认、局部配置、后台任务提示和工具面板等。

weixin_55051736的博客 1470

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Qt基础-模态与非模态窗口

VS+Qt应用开发-模态与非模态窗口模态与非模态的区别模态窗口的实现方法QDialog对话框QWidget和QMainWindow窗口 在Qt中,QDialog是所有对话框窗口类的基类,不只是对话框有模态与非模态区分,QWidget和QMainWindow窗口也可以设为模态,因此文章不称模态/非模态对话框,而叫做模态/非模态窗口。 模态与非模态的区别 模态(modal)窗口:窗口弹出后,没关闭之前,不可以对同一应用程序的其他窗口进行操作; 非模态(modeless)窗口:窗口弹出后,没关闭之前,可以对同一应

羽士的博客 5780

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 批处理之bat脚本获取系统日期
下一篇: Qt实现 自定义标题栏并支持界面放大缩小、移动
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值