QWidget实现模态及非模态

qt 模态对话框,实现阻塞其他窗口 模态对话框,就是阻塞同一应用程序中其他可视窗口的输入的对话框.你必须完成当前对话框中的操作,才能对其他的窗口进行操作,否则你点击其他的窗口是没有任何反应的,你只能完成当前窗口操作.这相当是一个操作窗口顺序的问题.2,w1.setModal(true).调用该方法参数为true(条件真),此时就能达到阻塞其他窗口的目的.比该窗口晚出现的窗口就会被当前窗口阻塞.必须先操作当前窗口.3,w1.exec().该方法使当前窗口进入循环,成功模态,你结束了当前窗口循环时,才能对其他窗口进行操作. 阅读详情
AI摘要

本文介绍了在Qt中设置模态窗口的两种方法及其注意事项。详细解释了如何通过构造函数设置模态属性,并讨论了不同模态类型的作用。此外,还探讨了设置模态窗口时可能遇到的问题及解决方法。

1、对QWidget设置模态窗口有两种方法:
第一种是在构造函数中
       setWindowFlags(Qt::FramelessWindowHint);
       setAttribute(Qt::WA_showModal, true);
       但这种方法已经在Qt4.5中被摒弃了,因为按照这样设置,对话框是无法使用触摸屏输入法的,只能用按键输入;
第二种是在构造函数中
       setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
       
setWindowModality(Qt::WindowModal);
       其中Qt::Dialog这个属性是要加的,因为这个属性会告诉Qt这个窗口是要被当做对话框对待的,从而实现预期的效果。而下面那个函数的参数有3种:
       Qt::NonModal :该窗口不是模态,不会阻塞其它界面接受输入信息;
       Qt::WindowModal:该窗口是一个当以层次的模态窗口,会阻塞它的父窗口、祖父窗口和各个兄弟窗口接受输入信息;
       Qt::ApplicationModal:该窗口是应用模态窗口,会阻塞所有窗口接受输入信息。
       用第二种就能够在弹出来的对话框中接收输入法信息。
2、设置了模态却没有用的原因:
       因为设置模态会的时候,Qt会根据当前窗口的父窗口是哪个,一步步往上找,然后将应该阻塞的全部阻塞,故没有效果的原因是没有父窗口。
       比如在一个QWidget中new一个自定义对话框,该对话框设置为setWindowModality(Qt::WindowModal),然后将这个QWidget里面的按键clicked()信号和对话框的show()槽函数连接起来,一旦点击就show对话框。这样创建完后却发现窗口不是模态的,原因就是没有父窗口!首先对话框是不可能用布局将其管理起来,所以其父窗口是默认0。或许有些人说在new的时候将父窗口的this传进去了,但是模态窗口的属性是在对话框创建的时候确定的,可此时父窗口QWidget根本就还没有完全创建完,因此parent还是0,故设置对话框失效!解决办法就是自定义一个槽函数,当按键按下时才在槽函数里面创建对话框,此时QWidget已经创建完成,可以将this传入,这样就能够获得预想的结果。

例如:

在
TimerWidget的构造函数里写上:
TimerWidget::TimerWidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
this->setWindowModality(Qt::WindowModal);//阻挡父亲窗口内其他控件,除非本dialog关闭
}

/**
* @brief 设置清洗  ---槽函数
*/
void ParamWidget::on_setClearBtn_clicked()
{
QWidget* mainForm = Global::getMainForm();
if (m_timerWidget == 0)
{
m_timerWidget = new TimerWidget(mainForm);//父窗口传进来

}
m_timerWidget->show();
}
ESP32 BLE Mesh Provisioner实战:手把手教你用ESP-IDF配网智能灯泡(附常见错误排查) 本文提供了一份基于ESP-IDF的ESP32 BLE Mesh Provisioner实战指南,详细解析了配网器的核心角色与工作流程。文章手把手教你从工程搭建、代码初始化到核心回调解析,并重点针对常见的‘Model not bound to AppKey’等错误提供了深度排查思路与解决方案,帮助你构建一个稳定可靠的智能照明网关。 阅读详情

相关推荐

Xilinx SDK调试与FPGA硬件验证全流程解析

本文详细解析了从Vivado导出硬件到Xilinx SDK进行调试与FPGA硬件验证的全流程。重点阐述了正确导出包含bitstream的硬件平台、创建合适的SDK工程、配置Debug会话以编程FPGA,并介绍了串口验证、自定义IP测试以及使用ILA进行软硬件联合调试的高级技巧,帮助开发者高效完成FPGA系统的软硬件协同开发与问题排查。

weixin_28327051的博客 311

Qt_QWidget窗体设置模态显示

【Qt】QWidget窗体的模态显示设置

FreeLikeTheWind的博客 6669

手把手教你用TJA1145A实现CAN节点智能唤醒(含数据帧过滤技巧)

本文详细介绍了如何使用TJA1145A收发器实现CAN节点的智能唤醒功能,包括数据帧过滤技巧和超低功耗设计。通过硬件级帧过滤和双条件唤醒机制,TJA1145A在保持微安级休眠电流的同时,能对特定报文做出毫秒级响应,显著提升电池供电设备的续航能力。

weixin_28721917的博客 250

QWidget设置为模态对话框

QWidget设置为模态对话框

大酷茬子的博客 2873

如何搭建一个vue项目(完整步骤)

查看版本的两种方式 出现版本号则说明安装成功(最新的以官网为准) 这里注意:安装vue-cli对node.js的版本是有要求的 装的两种方式:输入cmd命令 查看安装的版本(显示版本号说明安装成功) 如果你原来有版本或者版本比较低,可以升级...

m0_67392661的博客 5585

ONNC Open Neural Network Compiler 开源神经网络编译器 一个 开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)部署导入ONNX模型

ONNC是一个集合了开源、模块化、可重用编译器算法和工具链的库,专门针对深度学习加速器(DLA)。ONNC从底层开始构建,旨在将ONNX中间表示(IR)翻译成专有DLA代码。其软件架构设计强调可移植性和可重用性,从而简化了开发新后端的工作。上图展示了ONNC软件栈的顶层框图。软件栈从导入ONNX计算图模型到输出相应的硬件二进制文件,展示了各个功能块。

万有文的博客 1992

QWidget设置成模态对话框并弹框显示

无模式对话框(modeless dialog box 非模态对话框):模式对话框打开后,程序仍然能够进行其他工作(如一般的“查找与替换”对话框)模式对话框(modal dialog box模态对话框):在关闭模式对话框之前,程序不能进行其他工作(如一般的“打开文件”对话框)我们可以借助qt自带的类QObjectCleanupHandler来实现内存释放。具体用法,请自行百度。4、但是方法1和方法2会造成内存泄漏,因为Form的父类是空指针。或者使用类的成员变量,然后在析构函数删除这个指针。

$firecat利白的代码足迹$ 7372

Python程序—定子故障三相永磁同步电动机振动与电流数据集

1.0 kW 电机匝间短路故障数据: 正常匝间短路振动数据: 匝间短路故障,严重度为2.26%: 匝间短路故障,严重度为2.70%: 匝间短路故障,严重度为3.35%: 匝间短路故障,严重度为4.41%: 匝间短路故障,严重度为6.48%: 匝间短路故障,严重度为12.17%: 匝间短路故障,严重度为21.69%1.5 kW 电机匝间短路故障数据: 正常匝间短路振动数据: 匝间短路故障,严重度为1.57%: 匝间短路故障,严重度为1.88%: 匝间短路故障,严重度为2.34%

m0_66465741的博客 1320

QWidget实现模态对话框的效果

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

SkylineR36的博客 903

vivado中出现ERROR: [Labtools 27-2220]检测不出开发板

这个错误可能是由于 Vivado 工具中的 cs_server.exe 文件没有正确安装或者文件路径不正确导致的。你可以尝试以下步骤来。时间: 2023-08-16 12:05:50 浏览: 767。希望以上方法能够帮助你。

qq_40510975的博客 2388

【100%通过率】2023华为od机试C卷【电脑病毒感染】C++ 实现

一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t 表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1.

MISAYAONE的博客 1727

Qt5中用QWidget实现模态对话框和非模态对话框

利用继承自QWidget的类来实现自己的模态对话框和非模态对话框 一、模态对话框 MyWidget是你自己定义的类,继承自QWidget,在它的构造函数中添加: 第一步: 以下两句效果一样,选择一句添加即可 setAttribute(Qt::WA_ShowModal, true); //setWindowModality(Qt::ApplicationModal); 第二步: MyWidget ...

斧冰 3739

拉曼光谱入门:10.显微拉曼与共聚焦技术

本文系统阐述了显微拉曼光谱技术与共聚焦原理的融合机制,详细解析了从激光激发、针孔空间滤波到光谱采集的完整光路架构,阐明了共聚焦设计在提升三维空间分辨率、抑制荧光背景及实现微区无损层析方面的核心优势,并探讨了关键光学器件的性能边界与系统技术局限。

qq_53529450的博客 167

Qt - QDialog,QWidget实现模态及非模态

对于 QDialog 的模态及非模态是直接可以实现的,很多课本中都会提到,此处总结下。模态QDialog 方式一: QDialog dlg(this); dlg.exec();方式二: QDialog *pDlg=new QDialog(this); pDlg->setModal(true); pDlg->show();非模态QDialog QDialog *pDlg=new QDialog

L_Andy的专栏 2202

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

QDialog,QWidget实现模态及非模态

模态QDialog QDialog dlg(this); dlg.exec(); QDialog *pDlg=new QDialog(this); pDlg->setModal(true); pDlg->show(); 非模态QDialog QDialog *pDlg=new QDialog(this); pDlg->show();        QDialog实...

冷月醉雪的博客 1206

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Qt继承QWidget或者QWidget直接弹出窗口(非模态对话框)(对话框)

QWidget是Qt中主流的窗口类,实现QWidget窗口弹出主要有三个步骤。 1.1实例一个窗口类对象QWidget *widget = new QWidget(NULL); 1.2调用函数函数QWidget::setWindowsModality(Qt::WindowModality windowModality)设置显示窗口类型,其中Qt::WindowModality windowMo...

净无邪博客 9583

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

QWidget 有父指针,如何模态

QDialog,QWidget实现模态及非模态(模态Widget不能有父窗口,如果设置无边框就不能阻塞父窗口,但是可以强行设置指定Qt::Dialog,还可以setAttribute(Qt::WA_ShowModal),很多讲究)good

foxgod的专栏 361

Qt中的模态、非模态、半模态窗口

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 简述区别 模态对话框 简单一点讲就是在弹出模态对话框时,除了该对话框,整个应用程序的窗口都无法接受用户响应,处于等待状态,直到模态对话框被关闭。 这时一般需要用户点击对话框中的确定或取消按钮来关闭该对话框,程序得到对话框的返回值,并根据返回值进行相应的操作,之后将操作权返回给用户。这个时候用户就可以...

billy的博客 4032

在QWidget上实现窗口阻塞

如果可以正常使用QDialog作为模态化窗口,那最为推荐的是系统默认的,而这种强转实现的窗口阻塞只在迫不得已的情况下推荐。毕竟自带的肯定是有它的稳定性以及它的好处,否则开发者就不会这样做了。并且这种方法使用起来比较容易出现思路混乱,容易形成不好的习惯,就像我现在在创建新的界面是都是习惯性的使用QWidget,以后一定要修正这个不好的习惯,也希望大家不要向我学习。今天的更文到此结束,希望大佬批评指教!

qq_44987450的博客 2046

【Qt】QWidget模态显示

如果要模态显示,优先从QDialog继承。如果已经使用QWidget继承了,参考如下方法。

-凌凌漆-的博客 380

qt弹窗界面模态设置

1、模特说明 模态: 启动模态界面时,例如弹出对话框强制用户从其他正在进行的业务中聚焦到当前对话框,除了该对话框整个应用程序窗口都无法接受用户响应,无法切换界面,无法切换当前Qt应用。这可以保证用户按照自己设计的操作逻辑进行动作。只有关闭和退出该模态界面,才可以访问本应用程序的其他界面和功能。 非模态: 与模态相反,默认状态为非模态,即可以随意切换,可以在同一应用下的各个窗口界面任意切换。 半模态: 介于二者之间,冻结窗口界面,但其他应用继续执行响应。 所以,如果是dialog窗体,需要在exec以后还能让

weixin_42887343的博客 8869
上一篇: QT 选择文件夹
下一篇: Qt中QScrollArea的滚动条自动下拉
Maybe______
博客等级 码龄10年 26粉丝 13原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值