3.2 对话框QDialog(1)--Qt Creater 快速入门(笔记)

2024-05-28 03:32

本文主要是介绍3.2 对话框QDialog(1)--Qt Creater 快速入门(笔记),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

  • 模态和非模态对话框

    模态对话框:没有关闭它之前,不能在于同一应用程序的其他窗口进行交互。
    非模态对话框:没有关闭它之间,既可以与它交互,也可以同程序中的其他窗口交互。

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDialog>  //包含头文件MyWidget::MyWidget(QWidget *parent) :QWidget(parent),ui(new Ui::MyWidget)
{ui->setupUi(this);QDialog dialog(this);dialog->show();
}

这里在MyWidget类的构造函数中定义了一个QDialog类对象,还指定了dialog的父窗口为MyWidget类对象,就是那个this参数。
但是这是运行程序会发现一个窗口一闪而过,然后就只显示MyWidget类对象窗口了。为什么呢?因为在一个函数中定义的变量,等这个函数执行结束后,它就会自动释放。也就是说这里的dialog对象只有在这个构造函数中有用,等这个函数执行玩了,dialog也就消失了。
为了不让dialog消失,可以将QDialog对象的创建代码更改如下:

QDialog *dialog=new QDialog(thie);
dialog->show();

这次使用了QDialog对象指针,并使用了new运算符开辟了内存空间,这时在运行程序就已经可以正常显示了。

说明:我们说定义一个对象是指是指QDialog dialog这样的方式,而像QDialog *dialog不能称为定义了一个对象,而应说定义了一个指向QDialog类对象的指针变量。后面我们也会把QDialog *dialog说成定义了一个QDialog对象。
在补充一点,dialog对象指明了父窗口,所以没必要使用delete来释放该对象了。

其实,不用指针也可以让对话框显示出来,代码更改如下

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

运行程序会发现对话框弹出来了,但是MyWidget类对象的窗口没有出来;关闭对话框后,MyWidget类对象窗口才会弹出来。这类对话框称为模态对话框。(使用exec()函数创建的模态对话框不能使dialog对话框和MyWidget类对象同时出现)。
要想使一个对话框成为模态对话框,只需要调用它的exec( )函数。
而要使其成为非模态对话框,可以使用new操作来创建,然后使用show( )函数来显示。

其实,使用show函数也可以建立模态对话框,只需在其前面使用setModal()函数就可。例如:

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

它与exec()函数不一样,因为dialog对话框和MyWidget窗口同时显示出来了。这是因为调用show()函数后会立即将调用权交给调用者,那么程序可以继续往下执行。而调用exec()函数却不同,它只有对话框关闭后才会返回。

与setModal()函数相似的还有一个setWindowModality()函数,它有一个参数来设置模态对话框要阻塞的窗口类型,可以是Qt::NonModal(不阻塞任何窗口,就是非模态)、Qt::WindowModal(阻塞它的父窗口和所有祖先窗口以及他们的子窗口)、Qt::ApplicationModal(阻塞整个应用程序)。而setModal()函数默认设置是Qt::ApplicationModal

这篇关于3.2 对话框QDialog(1)--Qt Creater 快速入门(笔记)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1009419

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +