Qt编程基础 | 第三章-控件 | 3.3、对话框

news2024/7/4 4:30:17

一、QDialog

1.1、定义

对话框:在主窗口中操作,有可能触发某一个行为动作,会弹出一个新的对话窗口,解决一个临时性的会话,在对话窗口中执行某一个功能。QDialog可以作为自定义对话框的基类,同时Qt也提供了一些标准对话框,例如:QFileDialog、QColorDialog等,下面是QDialog类的继承结构,如下:

在这里插入图片描述

1.2、模态与非模态对话框

对话框常用的显示模式有两种,模态与非模态

  • 模态:不可以对其它窗口进行操作,调用exec方法显示
  • 非模态:可以对其它窗口进行操作,调用show方法显示

模态对话框又分成程序级别(Qt::ApplicationModal)窗口级别(Qt::WindowModal),两者的区别如下:

  • Qt::WindowModal:标志窗体的模态特性仅仅是作用于本窗体所在的继承层次上,也就是说本窗体的父窗体、上层的多个祖先窗体、本窗体的兄弟窗体及兄弟窗体的父窗体及其上层的多个祖先窗体的输入、响应都会被阻塞、挂起
  • Qt::ApplicationModal:标志窗体的模态特性作用在整个应用程序级别。只要本窗体得不到用户响应,则该应用程序所有其它窗体,用户都无法操作,即其它窗体都不响应用户的输入操作(如:键盘、鼠标操作)

Qt::ApplicationModal范围更广,涉及到整个应用程序范围;Qt::WindowModal标志只涉及到本窗体的继承层次上。常用的QDialog一般都是Qt::WindowModal,下面通过一个示例讲解两者间的区别。如下:

// main.cpp
#include "mainwindow.h"
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    Widget widget;
    widget.show();
    w.show();
    
    return a.exec();
}

// widget.cpp
#include "widget.h"
#include <QPushButton>

Widget::Widget(QWidget *parent) : QWidget(parent)
{
    resize(300, 200);
    QPushButton *p = new QPushButton("ADD", this);
}

// mainwindow.cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(500, 300);
//    setWindowModality(Qt::WindowModal);
    setWindowModality(Qt::ApplicationModal);
}

运行结果

在这里插入图片描述

mainwindow被设置成Qt::ApplicationModal,widget上的按键不能被选中。把mainwindow设置成Qt::WindowModal,程序运行结果如下:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(500, 300);
    setWindowModality(Qt::WindowModal);
//    setWindowModality(Qt::ApplicationModal);
}

在这里插入图片描述

从运行结果可以看出来,mainwindow设置成Qt::WindowModal后,widget(与mainwindow是平级的,没有继承关系)上面的按键可以被选中

1.3、QMessageBox

QMessageBox类提供了一个模态对话框,用于通知用户或向用户提出问题并接收答案

1.3.1、自定义QMessageBox

自定义QMessageBox可以显示更丰富的信息,如下:

在这里插入图片描述

	QMessageBox msgBox;
	// 设置标题
	msgBox.setWindowTitle(QStringLiteral("QMessageBox"));
	// 设置显示信息
	msgBox.setText("The document has been modified.");
	// 设置更加详细的信息
	msgBox.setInformativeText("Do you want to save your changes?");
	// 设置要显示的按键
	msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
	// 设置默认选中的按键
	msgBox.setDefaultButton(QMessageBox::Save);
	// 设置图标
	msgBox.setIcon(QMessageBox::Information);

	int ret = msgBox.exec();
	switch (ret) {
	case QMessageBox::Save:
		// Save was clicked
		break;
	case QMessageBox::Discard:
		// Don't Save was clicked
		break;
	case QMessageBox::Cancel:
		// Cancel was clicked
		break;
	default:
		// should never be reached
		break;
	}

1.3.2、使用QMessageBox提供的静态方法

使用QMessageBox类提供的静态方法,可以很方便的显示告警、提示、错误等信息。以critical静态方法为例,来讲解它们的用法,如下:

StandardButton critical(QWidget *parent, const QString &title, const QString &text, 
    StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
参数功能
parent父窗口
title标题
text显示的内容
buttons要显示的按键
defaultButton高亮显示的按键
    int ret = QMessageBox::critical(this, "critical", QStringLiteral("出现致命错误"),
		QMessageBox::Ok | QMessageBox::Close, QMessageBox::Ok);
	switch (ret) {
	case QMessageBox::Ok:
		qDebug() << "Ok was clicked";
		break;
	case QMessageBox::Close:
		qDebug() << "Close was clicked";
		break;
	default:
		break;
	}

显示效果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563992.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop部署本地模式

​ 本地模式&#xff0c;即运行在单台机器上。没有分布式的思想&#xff0c;使用的是本地文件系统。使用本地模式主要是用于对MapReduce的程序的逻辑进行调试&#xff0c;确保程序的正确性。由于在本地模式下测试和调试MapReduce程序较为方便&#xff0c;因此&#xff0c;这种模…

java实现大气质量插值图及六项污染物插值图图片导出

软件导出成果图效果 一、技术实现应用背景 大气污染是当今世界面临的一个严重问题。它不仅对人类健康造成了危害&#xff0c;还对环境和生态系统产生了负面影响。在许多地区&#xff0c;大气污染已经成为了日常生活中不可忽视的问题。 虽然大气污染的问题是复杂的&#xff0c;…

关于如何使用 python 下载CSV格式数据

本章节内容节自《python 编程从入门到实践》第十六章&#xff0c;我们将从网络上下载数据&#xff0c;并对数据进行可视化。就可以对其进行分析甚至观察其规律和关联。 学习目标 我们将访问并可视化以下两种常见格式存储的数据&#xff1a; CSV 使用 Python 模块 CSV 来处理以…

测试2年,26岁大龄程序员面试13家公司,拿下25K,差点被面试官KO了···

前言 我大概面试了13家公司&#xff0c;简历包装的是两年半测试经验&#xff0c;因为我的年纪已经是26岁&#xff0c;所以必须进行包装&#xff0c;这也并不是我想欺骗别人&#xff0c;而是现在无论干什么工作都需要有工作经验的&#xff0c;就连找个销售都要有工作经验的&…

Vue绑定class样式与style样式

1&#xff0c;回顾HTML的class属性 答&#xff1a;任何一个HTML标签都能够具有class属性&#xff0c;这个属性可能只有一个值&#xff0c;如class"happs"&#xff0c;也有可能存在多个属性值&#xff0c;如class"happs good blue"&#xff0c;js的原生DOM针…

STM32开发踩坑——芯片写保护解除

成立这个专栏的目的是&#xff0c;记录自己嵌入式开发遇到的问题&#xff0c;与成功的解决方法&#xff0c;方便自己回顾。 具体参考链接&#xff1a;STM32的Flash写了保护怎么办&#xff1f; 解决方法&#xff1a;在STLink连接目标板的情况下打开程序烧写软件ST-Link Utilit…

低代码开发迎来设备管理新时代:智能制造加速升级

随着智能制造时代的到来&#xff0c;制造业正在经历一场前所未有的变革。在这场变革中&#xff0c;设备管理平台和低代码开发已经成为了制造业的不二利器&#xff0c;帮助企业实现数字化转型&#xff0c;提高生产效率&#xff0c;降低成本&#xff0c;增强竞争力。 一、设备管…

OptaPlanner 中的hello world项目实战

实际操作步骤&#xff1a; 1.代码下载 下载下来的文件目录 2.使用编辑器打开hello-world项目 3.进行配置 配置JDK &#xff0c;File——》Settings File——》Project Structure 配置maven 说明&#xff1a;不用下载新的maven&#xff0c;用工具自带的&#xff0c;需要将sett…

旋翼无人机常用仿真工具

四旋翼常用仿真工具 rviz&#xff1a; 简单的质点&#xff08;也可以加上动力学姿态&#xff09;&#xff0c;用urdf模型在rviz中显示无人机和飞行轨迹、地图等。配合ROS代码使用&#xff0c;轻量化适合多机。典型的比如浙大ego-planner的仿真&#xff1a; https://github.c…

screen 的介绍及用法

screen 是什么 screen 是一种类似于终端模拟器的程序&#xff0c;允许你在一个终端窗口中创建和使用多个会话。这对于同时运行多个命令或任务非常有用&#xff0c;这样你就可以轻松地在它们之间切换&#xff0c;而不必依赖于多个终端窗口。此外&#xff0c;如果在ssh会话中运行…

HDMI之带宽计算

基本概念 像素时钟 英文 A pixel clock, also known as a dot clock, is a term commonly used in computer graphics and video display systems. It refers to the frequency at which pixels are displayed on a screen or monitor. The pixel clock determines the speed…

VMware是什么?VMware虚拟机最新安装教程

VMware Workstation是一款虚拟机软件&#xff0c;允许用户将Linux、Windows等多个操作系统作为虚拟机在单台PC上运行; 用户可以在虚拟机上重现服务器、桌面和平板电脑环境&#xff0c;无需重新启动即可跨不同操作系统同时运行应用。 通过对个人笔记本(PC)硬件资源的虚拟&#…

【zmq】REQ REP 模式

[c代码(https://github.com/dongyusheng/csdn-code/tree/master/ZeroMQ)zguide 官方有c++发布订阅:可以使用信封 发布订阅可以让消息一直流动请求应答是双向的,但是必须请求 应答 请求 应答 循环。简单的请求应答 requester 作为客户端以tcp连接到 reponderrequester zmq_sen…

自动化测试用例怎么写?最全自动化测试用例设计编写指南...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

算法系列题目

文章目录 一. 下一个更大元素1. 下一个更大元素 Ⅰ2. 下一个较大元素II 二. 区间问题1. 贪心策略最少射箭问题无重叠区间合并区间划分字母区间 2. 差分数组 三. 设计类题目1. LRU(最近最少使用)缓存2. LFU(最不经常使用)缓存 一. 下一个更大元素 1. 下一个更大元素 Ⅰ 添加链…

磐维数据库panweidb单节点服务器在centos7.9安装(研发环境)

一、系统环境优化 1.1 关闭SELINUX # 修改配置文件 cat /etc/selinux/config | grep -i SELINUX SELINUXdisabled# 关闭SELINUX setenforce 0 1.2 内核参数优化 vi /etc/sysctl.conf 添加# panweidb net.ipv4.tcp_max_tw_buckets 10000 net.ipv4.tcp_tw_reuse 1 net.ipv4.t…

CAS是什么?它的底层原理是什么?

目录 一、CAS概述 二、底层原理 三、总结 一、CAS概述 CAS&#xff08;Compare and Swap&#xff09;比较和交换&#xff1a;是一种并发算法&#xff0c;也是一种乐观锁&#xff0c;从JDK5开始&#xff0c;jdk提供了java.util.concurrent.*,此包下面的类在高并发场景下经常使用…

CTF密码学总结

0x01 目录 常见编码: ASCII编码Base64/32/16编码shellcode编码Quoted-printable编码XXencode编码UUencode编码URL编码Unicode编码Escape/Unescape编码HTML实体编码敲击码(Tap code)莫尔斯电码(Morse Code)编码的故事 各种文本加密 换位加密: 栅栏密码(Rail-fence Cipher)曲路密…

第13届蓝桥杯Scratch选拔赛真题集锦

第13届蓝桥杯Scratch选拔赛真题集锦 编程题 第 1 题问答题 跳舞机游戏 题目说明 编程实现 跳舞机游戏。 具体要求: 1).点击绿旗&#xff0c;舞台左上角显示得分0代表玩家分数&#xff0c;在得分右侧倒计时10代表游戏时长(10s) 2).游戏开始倒数计时&#xff0c;在舞台上随…

目标检测的通用实例提取

论文&#xff1a;General Instance Distillation for Object Detection 论文地址&#xff1a;https://arxiv.org/pdf/2103.02340.pdfhttps://arxiv.org/pdf/2103.02340.pdf 摘要 In recent years, knowledge distillation has been proved to be an effective solution for m…