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

这篇具有很好参考价值的文章主要介绍了Qt编程基础 | 第三章-控件 | 3.3、对话框。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、QDialog

1.1、定义

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

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

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);
}

运行结果

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

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

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

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

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

1.3、QMessageBox

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

1.3.1、自定义QMessageBox

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

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

	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;
	}

显示效果
Qt编程基础 | 第三章-控件 | 3.3、对话框文章来源地址https://www.toymoban.com/news/detail-464165.html

到了这里,关于Qt编程基础 | 第三章-控件 | 3.3、对话框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《TCP IP网络编程》第三章

    3.1 分配给套接字的IP地址与端口号         IP 是 Internet Protocol(网络协议)的简写,是为收发网络数据而分配给计算机的值。端口号并非赋予计算机的值,而是为了区分程序中创建的套接字而分配给套接字的序号。              为使计算机连接到网络并收发数据,必

    2024年02月13日
    浏览(39)
  • 第三章 MATLAB的分支语句和编程设计

            在前面的章节中,我们开发了几个完全运转的 MATLAB 程序。但是这些程序都十分 简单,包括一系列的 MATLAB 语句,这些语句按照固定的顺序一个接一个的执行。像这 样的程序我们称之顺序结构程序。它首先读取输入,然后运算得到所需结果,打印出结 果,并退出。至

    2024年02月05日
    浏览(39)
  • 《Opencv3编程入门》学习笔记—第三章

    记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 一、图像的载入、显示和输出到文件 (一)OpenCV的命名空间 简单的OpenCV程序标配: (二)Mat类简析 表示从指定路径下把名为dota.jpg的图像载入到Mat类型的srcImage 变量中。 (三)图像的载入与显示概述

    2024年02月08日
    浏览(55)
  • CMD与DOS脚本编程【第三章】

    预计更新 第一章. 简介和基础命令 1.1 介绍cmd/dos脚本语言的概念和基本语法 1.2 讲解常用的基础命令和参数,如echo、dir、cd等 第二章. 变量和运算符 2.1 讲解变量和常量的定义和使用方法 2.2 介绍不同类型的运算符和运算规则 第三章. 控制流程和条件语句 3.1 介绍if、else、for、

    2024年02月06日
    浏览(47)
  • 第三章:R语言编程 第六节:模块模式

    模块是一种结构,由无法从外部访问的数据以及操纵这些数据的函数组成,是标准化代码编写技术 模块模式的优点 1.因为无法从外部访问数据,所以很好的隐藏了内部实现,说人话就是无需考虑数据在模块内部是如何保存的 2.其次,因为只能借助实现定义的函数访问模块内部

    2024年03月11日
    浏览(38)
  • 第三章-OpenCV基础-4-掩模

    掩模,又称为掩膜,掩码,模板。图像掩模是指,用特定的图像/图形/物体遮挡代处理的图像(全部或局部),从而控制图像处理的区域,在数字图像处理中,掩模就是一个指定的数组,毕竟,图像也是数组。 左边图为原图,中间图为掩模(白色区域为透明区域,黑色区域为黑色遮挡区域),经过控

    2024年02月15日
    浏览(63)
  • Windows原生蓝牙编程 第三章 配对后进行蓝牙通信【C++】

    蓝牙系列文章目录 第一章 获取本地蓝牙并扫描周围蓝牙信息并输出 第二章 选取设备输入配对码并配对 第三章 配对后进行蓝牙通信 接着第二章,我们已经配对完成,接下来就是通过winsock进行通信了。 我又加了个SOCKET全局变量来保存套接字和WSADATA wsaData用于初始化套接字库

    2024年02月08日
    浏览(45)
  • 第三章:R语言编程 第五节:值传递&对象不变性

    在R语言中,一切皆为对象,同时在调用函数的时候也采用值传递的方式,即作为参数的对象会被复制,然后将副本传递给函数 例如: 这里将数据框作为参数传递给函数的时候,函数内部的修改将不会影响原对象。这是因为调用f()函数时采用的时值传递的方法;df2中保持的不

    2024年03月11日
    浏览(44)
  • 信息论基础第三章阅读笔记

    在信息论中,与大数定律类似的是渐进均分性(AEP),它是弱大数定律的直接结果。 大数定理针对独立同分布(i.i.d.)随机变量 ……………… 因此,当n很大时,一个观察序列出现的概率 p ( X 1 , X 2 , . . . , X n ) p(X_1,X_2,...,X_n) p ( X 1 ​ , X 2 ​ , ... , X n ​ ) 近似等于 2 − n H 2^{-nH}

    2024年02月07日
    浏览(57)
  • ChatGPT技术原理 第三章:深度学习基础

    目录 3.1 神经网络基础 3.2前向传播算法 3.3反向传播算法 3.4 优化器

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包