【快速上手QT】07-对话框QDialog

news2024/9/29 9:25:33

QDialog

今天讲一个我们这个系列的第一篇就提到的东西:QDialog。

相信经过前几篇的学习,大家应该是能够通过QT助手来对QDialog有个初步的了解。

我们就直接来测试一下。

#include "Zhetu.h"

#include <qdebug.h>
#include <QPushButton>
#include <QDialog>

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
	
	QPushButton* button = new QPushButton("test", this);
	button->move(100, 100);
	connect(button, &QPushButton::clicked, [&]() {
		QDialog* d = new QDialog();
		d->show();
		});
}

Zhetu::~Zhetu()
{}

就是我们先设置一个按钮,这个按钮按下,我们就生成一个QDialog。

我们先记着这个写法,在new这个QDialog的时候,它的构造函数里我们是空着的,也就是没有给它指定父亲,效果如上图。当QDialog出现的时候,实际上是多开了个窗口。

如果我们给它指定父亲为主界面的时候,效果如下图,没有多开一个窗口,这个是两种写法比较显著的区别。

然后我们发现,按一次按钮会生成一个QDialog,而我们可以一直按,如果我们只让它生成一个,那该怎么实现呢,我们从软件层面入手的话就可以在外面设置一个变量,用这个变量来控制只能生成一个。我们也可以从这个组件本身入手。

我们上面代码用的是show函数来让它显示出来,我们也有其他方法,例如上面的exec。

 使用exec来代替show之后,我们发现,一旦QDialog出现之后,我们就只能操作QDialog了,如果我们点击了主界面的话,则会发出提示音并且QDialog闪动,这就是在告诉我们,我们此时只能操作QDialog,直到我们关闭QDialog之后才恢复正常。

QDialog相关的事件函数也很多,这边就演示一下第一个closeEvent,其他的函数通过名字相信大家也能猜出是干什么的。

#include "Zhetu.h"

#include <qdebug.h>
#include <QPushButton>
#include <QDialog>

void QDialog::closeEvent(QCloseEvent* e) {
	qDebug() << "Bye world";
}

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
	
	QPushButton* button = new QPushButton("test", this);
	button->move(100, 100);
	connect(button, &QPushButton::clicked, [&]() {
		QDialog* d = new QDialog(this);
		d->exec();
		});
}

Zhetu::~Zhetu()
{}

消息对话框

那么关于QDialog的内容就讲这么多,接下来我们讲别的。

可以看到继承QDialog的组件有不少,我们讲一下QMessageBox,其他的相信大家经过这篇文章的学习之后也能通过QT助手看懂。

而QMessgaeBox中,我们主要讲一下它的静态函数。

我们从第三个开始看,从第三个开始的函数的返回值类型变得很长。

可以看得出来是枚举类型,也可以看的出来这些函数的返回值是int类型的。

我们从第一个开始测试。

#include "Zhetu.h"

#include <qdebug.h>
#include <QPushButton>
#include <QDialog>
#include <QMessageBox> 

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
	
	QPushButton* button = new QPushButton("test", this);
	button->move(100, 100);
	connect(button, &QPushButton::clicked, [&]() {
		int res = QMessageBox::critical(this, "title", "text");
		qDebug() << res;
		});
}

Zhetu::~Zhetu()
{}

看的出来这会弹出一个警告的提示框,我们点击默认提供的按钮“OK”之后返回值为1024,这也符合上面图片中的0x0400。

我上面测试代码中给构造函数传了三个参数,第一个是this,也就是指定它的父亲为主界面,第二个字符串设置提示框的标题,第三个字符串设置提示框里的内容。

但是实际上它的构造函数中可以有五个参数,我们再一个个试试。

看不懂英文的话我们就简单翻译一下。 

 我们再多加一个参数试一下。

根据QT助手提供的构造函数中的参数类型,我们先随便塞一个Close进去,可以发现,原本“OK”的按键变成了“Close”,也就是说我们可以更改提示框中的按键的内容,但是不是随意更改的,因为传参的类型需要为QMessageBox::StandarButtons类型。

我们再传入第五个参数试试。

发现按钮多了一个,并且排在前面的是第五个参数,当我们按下回车的时候,默认选择的也是第五个参数。

因此我们稍微总结一下,提示框可以有两个按钮(但是默认是一个,另一个我们是需要传入参数指定的),按下不同按钮的时候,提示框会关闭,并且根据我们按下的按钮返回不同的数值,我们可以根据不同数值去执行不同的逻辑。

其实剩下其他函数也差不多,只是提示框的类型不一样,那么下面就简单地演示一下,详细的内容都可以像上面那样通过查询QT助手去搞懂。

当然了,以上的静态函数是很方便我们使用的,因为不需要自己去new一个类出来,但是缺点也很明显,那就是提供我们修改的空间不大,并且也无法重载事件函数,虽然基本上够我们使用,但是有些情况下我们还需要自己DIY的,那么我们就需要new一个QMessageBox出来了。

我们构造一个出来QMessageBox出来,默认就有一个“OK”按钮,我们使用exec让它显示出来,也会有个返回值回来。

那么我们应该如何DIY呢,我们再看看QMessageBox的函数,找到set开头的。

相信大家都能看得懂,我就不一个个介绍了,下面我就总体的展示一下作为这篇文章的结尾。

#include "Zhetu.h"

#include <qdebug.h>
#include <QPushButton>
#include <QDialog>
#include <QMessageBox> 

Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
	this->setFixedSize(650, 400);
	
	QPushButton* button = new QPushButton("test", this);
	button->move(100, 100);
	connect(button, &QPushButton::clicked, [&]() {
		QMessageBox* m = new QMessageBox(this);
		m->setWindowTitle("title");
		m->setText("text");
		m->setIcon(QMessageBox::Critical);
		m->setStandardButtons(QMessageBox::Yes);	//设置一开始就有的按钮内容
		m->addButton(QMessageBox::Cancel);			//添加一个按钮
		m->addButton(QMessageBox::Save);
		m->setDefaultButton(QMessageBox::Yes);		//设置默认按钮(需要先有)
		int res = m->exec();
		qDebug() << res;
		});
}

Zhetu::~Zhetu()
{}

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

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

相关文章

C++输入输出(I\O)

我们知道C是由C语言发展而来的&#xff0c;几乎完全兼容C语言&#xff0c;换句话说&#xff0c;你可以在C里面编译C语言代码。如下图: C语言是面向过程的语言&#xff0c;C在C语言之上增加了面向对象以及泛型编程机制&#xff0c;因此C更适合中大型程序的开发&#xff0c;然而C…

RK DVP NVP6158配置 学习

NVP6158简介 NVP6158C是一款4通道通用RX&#xff0c;提供高质量图像的芯片。它接受来自摄像机和其他视频信号的独立4通道通用输入来源。它将4通道通用1M至8M 7.5P视频格式数字化并解码为代表8位ITU-R BT.656/1120 4:2:2格式的数字分量视频&#xff0c;并将单独的BT.601格式与27…

计算机网络——概述

计算机网络——概述 计算机网络的定义互连网&#xff08;internet&#xff09;互联网&#xff08;Internet&#xff09;互联网基础结构发展的三个阶段第一个阶段——APPANET第二阶段——商业化和三级架构第三阶段——全球范围多层次的ISP结构 ISP的作用终端互联网的组成边缘部分…

Nodejs 第四十九章(lua)

lua Lua是一种轻量级、高效、可嵌入的脚本语言&#xff0c;最初由巴西里约热内卢天主教大学&#xff08;Pontifical Catholic University of Rio de Janeiro&#xff09;的一个小团队开发而成。它的名字"Lua"在葡萄牙语中意为"月亮"&#xff0c;寓意着Lua…

数据分析-Pandas数据y轴双坐标设置

数据分析-Pandas数据y轴双坐标设置 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

平衡搜索二叉树—AVL树

一、定义&#xff1a; 为了避免搜索二叉树的高度增长过快&#xff0c;降低二叉树的性能&#xff0c;规定在插入和删除二叉树的结点的时候&#xff0c;任何结点左右子树的高度差绝对值不超过1&#xff0c;这样的二叉树被称为平衡二叉树&#xff08;balanced Binary Tree&#xf…

为PDF创建目录(侧边栏目录)

通过可以新建书签的pdf阅读器。 知云翻译&#xff1a;可以新建书签和子书签。 Adobe Acrobat&#xff1a;只能新建书签&#xff0c;不能建立子书签。

DA14531在三星手机手写笔的应用让我打开眼镜

手写笔的功能 这是一款内置蓝牙功能的魔性笔&#xff0c;它是遥控器、是照相、切换摄像头、是暂停或者打开播放列表。乃至更多操作-通过不同的手势隔空操作&#xff0c;或者按下触控按键便可轻松搞定。 手写笔硬件设计 内部结构 采用2.3V可循环充电电池&#xff0c;放入手…

软件测试零基础新手入门必看

软件测试&#xff1a;使用技术手段验证软件是否满足使用需求 目的&#xff1a;减少缺陷&#xff0c;保证质量 一、测试主流技能&#xff1a; 1.功能测试 测试主要验证程序的功能是否满足需求 2.自动化测试 使用工具或代码代替手工&#xff0c;对项目进行测试 3.接口测试 …

【原理图PCB专题】Allegro模块化移动器件报...has the LOCKED property怎么解锁?

在模块化原理图时,PCB也需要做一个模块.mdd文件。这时需要先画好图纸然后再制作模块化文件。 修改文件时会发现模块化器件报错,无法编辑模块内部器件和走线,器件和走线都被LOCKED,如下所示报错内容: Symbol "U1" Selected Cannot edit Symbol "U1". M…

(Linux学习七)进程介绍

一、进程 进程生命周期&#xff1a;由系统程序。form出来的子程序&#xff0c;具备一定的父的资源&#xff08;权利&#xff0c;内存空间&#xff0c;PID&#xff09;直到运行完毕&#xff0c;退出系统 查看进程 ps aux 查看所有进程参数&#xff1a;aux ps a 显示现行…

剑指offer 二维数组中的查找 C++

目录 前言 一、题目 二、解题思路 1.直接查找 2.二分法 三、输出结果 前言 最近在牛客网刷题&#xff0c;刷到二维数组的查找&#xff0c;在这里记录一下做题过程 一、题目 描述 在一个二维数组中&#xff08;每个一维数组的长度相同&#xff09;&#xff0c;每一行都按照…

00. Nginx总结-错误汇总

/www/wangmingqu/index.html" is forbidden (13: Permission denied) 错误图片 错误日志 2024/01/09 22:26:27 [error] 1737#1737: *1 "/www/wangmingqu/index.html" is forbidden (13: Permission denied), client: 192.169.1.101, server: www.wangmingqu.c…

前端知识点、技巧、webpack、性能优化(持续更新~)

1、 请求太多 页面加载慢 &#xff08;webpack性能优化&#xff09; 可以把 图片转换成 base64 放在src里面 减少服务器请求 但是图片会稍微大一点点 以上的方法不需要一个一个自己转化 可以在webpack 进行 性能优化 &#xff08;官网有详细描述&#xff09;

数据结构与算法:堆排序和TOP-K问题

朋友们大家好&#xff0c;本节内容来到堆的应用&#xff1a;堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序&#xff0c;冒泡排序&#xff0c;快速排序&#xff08;qsor…

光伏发电预测

XGB、LGB在datacamp(学习网站) data fountain与国家电投系列赛,光伏发电预测 题目:给一组特征,预测瞬时发电量,训练集9000个点,测试集8000个点,特征包含光伏板的属性和外部环境等。 数据字段:ID、光伏电池板背侧温度、光伏电站现场温度、计算得到的平均转换效率、数…

Javaweb之SpringBootWeb案例之自动配置案例的自定义starter分析的详细解析

3.2.4.1 自定义starter分析 前面我们解析了SpringBoot中自动配置的原理&#xff0c;下面我们就通过一个自定义starter案例来加深大家对于自动配置原理的理解。首先介绍一下自定义starter的业务场景&#xff0c;再来分析一下具体的操作步骤。 所谓starter指的就是SpringBoot当…

数据删除

目录 数据删除 删除员工编号为 7369 的员工信息 删除若干个数据 删除公司中工资最高的员工 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 数据删除 删除数据就是指删除不再需要的数据 delete from 表名称 [where 删…

HTML+CSS+BootStrap景区官网

一、技术栈 支持pc、pad、手机访问&#xff0c;页面自适应&#xff01;&#xff01; html5cssbootstrapjs 二、项目截图 接受项目定制&#xff0c;站内联系博主&#xff01;&#xff01;&#xff01;

算法学习03:前缀和与差分(互逆)

算法学习03&#xff1a;前缀和与差分&#xff08;互逆&#xff09; 文章目录 算法学习03&#xff1a;前缀和与差分&#xff08;互逆&#xff09;前言一、前缀和1.一维2.二维 二、差分1.一维在这里插入图片描述2.二维在这里插入图片描述 ![在这里插入图片描述](https://img-blog…