QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例
QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例
部分代码:
// 创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束
QMenu *pDialog = mBar->addMenu(QString::fromLocal8Bit("对话框"));
QAction *pTopDialog = pDialog->addAction(QString::fromLocal8Bit("模态对话框"));
connect(pTopDialog, &QAction::triggered,
[this] () mutable {
QDialog * pdlg1 = nullptr;
pdlg1 = new QDialog(this);
pdlg1->setWindowTitle(QString::fromLocal8Bit("模态对话框"));
pdlg1->setModal(true);
pdlg1->setAttribute(Qt::WidgetAttribute::WA_DeleteOnClose);
pdlg1->show();
qDebug() << QString::fromLocal8Bit("打开模态对话框").toStdString().c_str() << "dialog addr: " << (void *)pdlg1 << (void *)&pdlg1;
});
pDialog->addSeparator();
static QPointer<QDialog> pp = nullptr; // 确保对话框的唯一性的QT智能保护指针
QAction *pNTopDialog = pDialog->addAction(QString::fromLocal8Bit("非模态对话框"));
connect(pNTopDialog, &QAction::triggered,
[this] () mutable {
QDialog * pdlg2 = nullptr;
if ( pp.isNull() )
{
pdlg2 = new QDialog(this);
pp = pdlg2; // 保存当前对话框的QObject对象的地址
pdlg2->setWindowTitle(QString::fromLocal8Bit("非模态对话框"));
pdlg2->setModal(false);
pdlg2->setAttribute(Qt::WidgetAttribute::WA_DeleteOnClose);
pdlg2->show();
qDebug() << QString::fromLocal8Bit("打开非模态对话框").toStdString().c_str() << "dialog addr: " << (void *)pdlg2 << (void *)&pdlg2;
}
else
{
pdlg2 = pp.data(); // 获得当前对话框的QObject对象的地址
qDebug() << QString::fromLocal8Bit("当前对话框已经打开").toStdString().c_str() << "dialog addr: " << (void *)pdlg2 << (void *)&pdlg2;
}
});
效果:
控制台输出信息:
QWindowsWindow::setGeometryDp: Unable to set geometry 100x30+481+302 on QWidgetWindow/'QDialogClassWindow'. Resulting geometry: 116x30+481+302 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215).
QWindowsWindow::setGeometryDp: Unable to set geometry 100x30+481+302 on QWidgetWindow/'QDialogClassWindow'. Resulting geometry: 116x30+481+302 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215).
打开模态对话框 dialog addr: 0x4b78b0 0x22c298
QWindowsWindow::setGeometryDp: Unable to set geometry 100x30+782+289 on QWidgetWindow/'QDialogClassWindow'. Resulting geometry: 116x30+782+289 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215).
QWindowsWindow::setGeometryDp: Unable to set geometry 100x30+782+289 on QWidgetWindow/'QDialogClassWindow'. Resulting geometry: 116x30+782+289 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215).
打开非模态对话框 dialog addr: 0x415ea8 0x22c27c
当前对话框已经打开 dialog addr: 0x415ea8 0x22c27c
当前对话框已经打开 dialog addr: 0x415ea8 0x22c27c
QWindowsWindow::setGeometryDp: Unable to set geometry 100x30+782+289 on QWidgetWindow/'QDialogClassWindow'. Resulting geometry: 116x30+782+289 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215).
QWindowsWindow::setGeometryDp: Unable to set geometry 100x30+782+289 on QWidgetWindow/'QDialogClassWindow'. Resulting geometry: 116x30+782+289 (frame: 8, 30, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215).
打开非模态对话框 dialog addr: 0x4847f0 0x22c27c
当前对话框已经打开 dialog addr: 0x4847f0 0x22c27c
当前对话框已经打开 dialog addr: 0x4847f0 0x22c27c
QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例的更多相关文章
- QT XML文档的解析 QXmlStreamReader, DOM,SAX 三种解析方法 简单示例
0. xml文档如下 <?xml version="1.0"?> <bookindex> <entry term="sidebearings ...
- QT模态对话框及非模态对话框
QT模态对话框及非模态对话框 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对 ...
- Qt5创建模态和非模态对话框
1.模态对话框创建: 第一种方法: QDialog dialog(this); dialog.exec(); this为该对话框的父窗口. 第二种方法: QDialog *dialog = new Q ...
- QT笔记之模态对话框及非模态对话框
模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...
- VS2010/MFC对话框:非模态对话框的创建及显示
非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切 ...
- VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)
上一节鸡啄米讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 鸡啄米已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.鸡啄米会将 ...
- VS2010-MFC(对话框:非模态对话框的创建及显示)
转自:http://www.jizhuomi.com/software/162.html 前面已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.本节会将上一讲中 ...
- Qt 窗体的模态与非模态(setWindowFlags(Qt::WindowStaysOnTopHint);比较有用,还有Qt::WA_DeleteOnClose)
概念 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等. 1. 模态窗体 ...
- MFC模态和非模态对话框编程
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box). 一.模态对话框(model dialog box) 在程 ...
随机推荐
- [CF888E] Maximum Subsequence 序列分治
早期作品,不喜轻喷. LG传送门 序列分治板子题. 切这道题用了好长时间,所以想发篇题解作为纪念 . 首先,我们认真观察题目数据(面向数据做题是个好习惯),发现题目的\(n\)竟然只有\(35\),我 ...
- TMDXEVM6678L EVM开发板初使用(1)
1. 板子上电风扇转个不停,震动很大. 2. 有点懵逼,第一步干啥,首先安装板子的软件开发包,资料下载地址http://www2.advantech.com/Support/TI-EVM/6678le ...
- 自己通过Cygwin编译的windowsx86下的更新至4.0.1
采用方法:https://my.oschina.net/maxid/blog/186506 方法中在3.2.6未找到src/redis.h文件 未修改 方法中 /deps/hiredis/net.c ...
- appium+python自动化☞appium python api大全
整理了一些常用的appium python api,供学习使用...
- java获取IP地址
最近在一个多系统集成的项目中,由于跳转路径含IP地址,每次IP改了重启项目都得改好多地方,甚是麻烦.刚在网上了解到java获取IP地址,给大家分享下: 首先要导入jar包 request.getRem ...
- python-生成器、迭代器、装饰器
目录 动态语言和静态语言 __slots__ 生成器 迭代器 闭包 装饰器 动态语言和静态语言 动态语言可以在运行的过程中修改代码,例如python在运行的过程中给已创建好的类添加属性和方法. 静态语 ...
- 无法找到 ContextLoaderListener 类
问题:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 原因:Eclips ...
- US Customs bond DDP 船运
客户提供目的港门点地址,提供美国进口产品的关税税率基本上就可以了关于ISF信息到时候你发给老外让老外填填好就可以了BAND 货值*0.575%POA 货值*0.335%这二个费用如果国内付就付了,国 ...
- 3.hive的thriftserver服务
1.ThiftServer介绍 正常的hive仅允许使用HiveQL执行查询.更新等操作,并且该方式比较笨拙单一.幸好Hive提供了轻客户端的实现,通过HiveServer或者HiveServer2, ...
- idea的快捷键(复制)
IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Sh ...