QT系列教程(6) 几种标准对话框

几种标准对话框

本文介绍几种标准对话框,都是Qt封装好的,我们先创建一个界面,添加几个按钮,然后分别在几个按钮的回调函数里添加创建不同对话框的逻辑

https://cdn.llfc.club/1662265055406.jpg

颜色对话框

颜色对话框用来选择颜色,创建后会显示各种颜色和透明度信息

void MainWindow::on_pushButton_clicked()
{
//    QColorDialog colorDlg(Qt::blue, this);
//    colorDlg.setOption(QColorDialog::ShowAlphaChannel);
//    colorDlg.exec();
//    QColor color = colorDlg.currentColor();
//    qDebug() << "color is " << color;QColor color = QColorDialog::getColor(Qt::blue, this,tr("选择颜色"), QColorDialog::ShowAlphaChannel );qDebug() << "color is " << color;
}

注释中也是创建颜色对话框的一种方式,两种方式都可以。

文本对话框

创建一个选择文件的对话框,选择后,可以根据返回值打印选择的文件的路径信息

void MainWindow::on_pushButton_2_clicked()
{QString path = QDir::currentPath();QString title = tr("文件对话框");QString filter = tr("文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)");QString aFileName=QFileDialog::getOpenFileName(this,title,path,filter);qDebug() << aFileName << endl;
}

输入对话框

输入对话框分几种,包括文本输入对话框,整数输入对话框,浮点数输入对话框,条目输入对话框。
先看看文本输入对话框

void MainWindow::on_pushButton_3_clicked()
{bool ok = false;auto text = QInputDialog::getText(this, tr("文字输入对话框"), tr("请输入用户的姓名"), QLineEdit::Normal, tr("admin"), &ok);if(ok){qDebug() << text << endl;}
}

整形输入对话框

void MainWindow::on_pushButton_4_clicked()
{bool ok = false;auto intdata = QInputDialog::getInt(this,tr("数字输入对话框"),tr("请输入数字"),200,-200,400,10,&ok);if(ok){qDebug() << intdata << endl;}
}

浮点输入对话框

void MainWindow::on_pushButton_5_clicked()
{bool ok = false;auto floatdata = QInputDialog::getDouble(this,tr("浮点数输入对话框"),tr("输入浮点数"),0.1,-1,1,2,&ok);if(ok){qDebug() << floatdata << endl;}
}

条目输入对话框

void MainWindow::on_pushButton_6_clicked()
{QStringList items;items << tr("条目1") << tr("条目2");bool ok = false;auto itemData = QInputDialog::getItem(this,tr("条目输入对话框"),tr("输入或选择条目"),items,0,true, &ok);if(ok){qDebug() << "item is " << itemData << endl;}
}

提示对话框

void MainWindow::on_pushButton_7_clicked()
{auto ret = QMessageBox::question(this,tr("提问对话框"),tr("你是单身吗"),QMessageBox::Yes, QMessageBox::No);if(ret == QMessageBox::Yes || ret == QMessageBox::No){qDebug() << "ret is " << ret << endl;}auto ret2 = QMessageBox::information(this,tr("通知对话框"),tr("你好单身狗"),QMessageBox::Ok);if(ret2 == QMessageBox::Ok){qDebug() << "ret2 is " << ret2 << endl;}auto ret3 = QMessageBox::warning(this,tr("警告对话框"),tr("你最好找个地方发泄一下"),QMessageBox::Ok);if(ret3 == QMessageBox::Ok){qDebug() << "ret3 is " << ret3 << endl;}auto ret4 = QMessageBox::critical(this,tr("关键提示对话框"), tr("我梦寐以求是真爱和自由"),QMessageBox::Ok);if(ret4 == QMessageBox::Ok){qDebug() << "ret4 is " << ret4 << endl;}
}

进度对话框

当我们复制或进行文件传输时,会显示一个进度条的对话框,我们可以使用QProcessDialog来操作。

void MainWindow::on_pushButton_8_clicked()
{// 进度提示框一闪而逝,不是逻辑问题,是5000量级太小了QProgressDialog progressDialog(tr("正在复制"),tr("取消复制"),0,5000,this);progressDialog.setWindowTitle(tr("文件复制进度对话框"));progressDialog.setWindowModality(Qt::ApplicationModal);progressDialog.show();for(int i = 0; i < 5000; i++){progressDialog.setValue(i);QApplication::processEvents();if(progressDialog.wasCanceled()){break;}}progressDialog.setValue(5000);
}

因为循环很快完成,所以进度条一闪而逝,那么我们可以通过定时器的方式定时更新进度,这样就可以更清楚的看到进度条对话框更新情况了

void MainWindow::on_pushButton_8_clicked()
{//改用定时器_progressDialog = new QProgressDialog(tr("正在复制"),tr("取消复制"),0,5000,this);_progressDialog->setWindowTitle(tr("文件复制进度对话框"));_progressDialog->setWindowModality(Qt::ApplicationModal);_timer = new QTimer(this);connect(_timer, &QTimer::timeout, this, &MainWindow::on_updateProgressDialog);connect(_progressDialog, &QProgressDialog::canceled, this, &MainWindow::on_cancelProgressDialog);_timer->start(2);qDebug("复制结束");
}

上面代码连接了定时器的timeout信号和主窗口的on_updateProgressDialog函数, 该函数的主要作用就是定时更新进度条,逻辑如下

void MainWindow::on_updateProgressDialog()
{_count++;if(_count > 5000){_timer->stop();delete  _timer;_timer = nullptr;delete _progressDialog;_progressDialog = nullptr;_count = 0;return;}_progressDialog->setValue(_count);
}

另外我们需要在进度条满了的时候发消息通知主窗口关闭

void MainWindow::on_cancelProgressDialog(){_timer->stop();delete  _timer;_timer = nullptr;delete _progressDialog;_progressDialog = nullptr;_count = 0;return;
}yi

这样进度条满了之后我们就可以回收定时器资源了。

向导对话框

当我们想引导用户操作时可以采用向导对话框,比如安装软件时就会根据向导对话框一步一步操作,我们也实现一个向导对话框

void MainWindow::on_pushButton_10_clicked()
{QWizard wizard(this);wizard.setWindowTitle(tr("全城热恋"));QWizardPage* page1 = new QWizardPage();page1->setTitle(tr("婚恋介绍引导程序"));auto label1 = new QLabel();label1->setText(tr("该程序帮助您找到人生伴侣"));QVBoxLayout *layout = new QVBoxLayout();layout->addWidget(label1);page1->setLayout(layout);wizard.addPage(page1);QWizardPage* page2 = new QWizardPage();page2->setTitle("选择心动类型");QButtonGroup *group = new QButtonGroup(page2);QRadioButton * btn1 = new QRadioButton();btn1->setText("白富美");group->addButton(btn1);QRadioButton * btn2 = new QRadioButton();btn2->setText("萝莉");group->addButton(btn2);QRadioButton * btn3 = new QRadioButton();btn3->setText("御姐");group->addButton(btn3);QRadioButton * btn4 = new QRadioButton();btn4->setText("小家碧玉");group->addButton(btn4);QRadioButton * btn5 = new QRadioButton();btn5->setText("女汉子");group->addButton(btn5);QRadioButton * btn6 = new QRadioButton();btn6->setText("成年人不做选择,全选!");group->addButton(btn6);QVBoxLayout *vboxLayout2 = new QVBoxLayout();for(int i = 0; i < group->buttons().size(); i++){vboxLayout2->addWidget(group->buttons()[i]);}page2->setLayout(vboxLayout2);wizard.addPage(page2);QWizardPage* page3 = new QWizardPage();page3->setTitle(tr("你的缘分即将到来"));auto label3 = new QLabel();label3->setText(tr("感谢您的参与,接下来的一个月会遇到对的人"));QVBoxLayout *layout3 = new QVBoxLayout();layout3->addWidget(label3);page3->setLayout(layout3);wizard.addPage(page3);wizard.show();wizard.exec();
}

总结

视频链接https://www.bilibili.com/video/BV1Vd4y1g7vP/?spm_id_from=333.999.0.0&vd_source=8be9e83424c2ed2c9b2a3ed1d01385e9
源码链接https://gitee.com/secondtonone1/qt-learning-notes

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

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

相关文章

ABB码垛机器人IRB260通讯板维修

ABB码垛机器人在现代制造业中发挥着重要作用&#xff0c;而机器人通讯板维修对于确保机器人的正常运行至关重要。 通讯板是ABB码垛机器人与控制系统之间进行数据传输的桥梁。它负责接收控制系统的指令&#xff0c;并将机器人的运行数据反馈给控制系统。如果通讯板出现故障&…

Qos基础

一、Qos概述 Qos是一个框架&#xff0c;解决服务质量&#xff0c;尽力而为模型&#xff0c;集成服务以及区分服务模型&#xff0c;流量分类与标识。 使用Qos是带宽不够。 每个接口有硬件队列和软件队列&#xff08;队列排满了就不会再排&#xff09;。 企业宽带一般都是上行和下…

WHAT - 用户登录系列(二)- 单点登录 SSO

目录 一、认证机制1.1 基于会话的认证&#xff08;Session-based Authentication&#xff09;1. 介绍2. 基本流程 1.2 JSON Web Tokens (JWT)1. 介绍2. jwt 组成3. 基本流程4. 阻止列表5. 刷新令牌 二、单点登录&#xff1a;SSO2.1 单系统登录2.2 SSO 介绍2.3 SSO 登录2.4 SSO …

使用jquery.mousewheel-3.0.6.pack.js时报错

基于1.12.4版本的jquery.min.js&#xff0c;在使用jquery.mousewheel-3.0.6.pack.js时报错了&#xff1a; 可以如下解决&#xff1a; addEventListener事件里要加上{ passive: false }&#xff0c;这样就可以在使用鼠标滚轮放大缩小图片时&#xff0c;就不会报上述的错误了。 …

解决docker容器: bash: ping: command not found, 并制作镜像

一. 出现原因 从 dockerhub 拉下来的镜像都是最轻量级的, 不会安装各种工具, 所以使用 ping, vim 等命令, 会出现 command not found 二. 解决方式 2.1 安装工具包 进入到一个正在运行的容器内部, 执行命令: apt-get update 之后会发现, 容器正在更新软件包, 不过最终会由…

水工建筑物荷载设计规范的技术关键点

遵循《水工建筑物荷载设计规范》的指引&#xff0c;水工建筑所承载的荷载依据其作用的时间变异性特征&#xff0c;可划分为永久作用荷载、可变作用荷载以及偶然作用荷载三个主要类别。 一、荷载分类及其特点 永久作用荷载&#xff1a;涉及建筑物自身的结构重量&#xff0c;以及…

主线程等待所有线程结束之后再执行

如何让主线程等待所有线程结束之后再执行 1、Future的机制&#xff0c;使用Future.get()阻塞等待结果&#xff08;Future&#xff0c;FutureTask&#xff09; 2、CountDownLatch同步工具类&#xff0c;此类的作用就是一个线程等待所有线程结束之后再执行 3、CompletableFuture …

音视频开发—FFmpeg播放YUV文件,YUV转换为JPEG操作

文章目录 1.使用命令行播放YUV数据1.1命令解析1.2参数说明 2.使用C语言实现将YUV数据转为JPEG图片格式2.1需求分析2.2读取YUV源文件2.3将YUV数据封装为AVFrame2.4将NV12 转换为YUV420平面格式2.5初始化MJPEG编码器2.6将YUV420P编码为JPEG2.7将编码数据写入图片文件2.8完整代码 …

App自动化测试_Python+Appium使用手册

一、Appium的介绍 Appium是一款开源的自动化测试工具&#xff0c;支持模拟器和真机上的原生应用、混合应用、Web应用&#xff1b;基于Selenium二次开发&#xff0c;Appium支持Selenium WebDriver支持的所有语言&#xff08;java、 Object-C 、 JavaScript 、p hp、 Python等&am…

安装flask:后端框架的学习之旅

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、创建虚拟环境 1. 引入虚拟环境的概念 2. 创建Flask虚拟环境 三、安装Flask…

CSRF跨站请求伪造漏洞

CSRF跨站请求伪造漏洞 1.CSRF漏洞概述2.防御CSRF攻击3.CSRF防御绕过CSRF令牌未绑定到用户会话自定义标头令牌绕过绕过Referer检查关键词绕过 4.利用示例使用HTML标签进行GET表单 GET 请求表单POST请求通过 iframe 发送表单 POST 请求Ajax POST 请求 5.CSRF BP 验证方法6.CSRF测…

HTTP协议介绍与TCP协议的区别

1、HTTP介绍 HTTP&#xff08;超文本传输协议&#xff0c;Hypertext Transfer Protocol&#xff09;是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 是基于TCP/IP 进行数据的通信&#xff0c;通常使用端口 80/8080。HTT…

软件需求规格说明书(Word原件@配套软件全资料)

软件需求规格说明书编写规范编写规范 1.项目背景 2.项目目标 3.系统架构 4.总体流程 5.名称解释 6.功能模块 软件项目相关全套精华资料包获取方式①&#xff1a;点我获取 获取方式②&#xff1a;本文末个人名片直接获取。 软件资料清单列表部分文档清单&#xff1a;工作安排任…

Optional类

一、概述 泛型类、java8引进的、java.util包里 二、作用 解决空指针异常带来的不便 三、做法 将对象封装为一个Optional对象&#xff0c;如果封装的对象为空&#xff08;即该对象不存在&#xff09;&#xff0c;可以使用默认值和或者执行默认操作 四、方法 1、empty() 创…

【Qt知识】Qt Creator快捷键

以下是Qt Creator中的一些常用快捷键列表&#xff08;持续更新&#xff09;&#xff1a; 基本编辑 多行注释/取消多行注释: Ctrl /编译工程: Ctrl B运行工程: Ctrl R整行上移/下移: Ctrl Shift ↑/↓查找: Ctrl F函数声明和定义切换: F2向下查找: F3头文件和源文件切换:…

【postgresql初级使用】初识触发器,在数据行发生变化时自动执行用户行为,也可以SQL级别触发,特别是视图上可以有触发器了

初识触发器 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 初识触发器概…

【成品设计】基于RT-thread星火开发板的智能监测系统设计

《基于RT-thread星火开发板的智能监测系统设计》 所需器件&#xff1a; 主控&#xff1a;STM32F407星火开发板。温湿度传感器&#xff1a;采集当前环境中的温湿度。环境传感器&#xff1a;采集当前环境中的光照强度。CO2传感器&#xff0c;采集当前环境中的C02浓度。粉尘传感…

excel怎么对非数字求和汇总?

如&#xff1a;学生小王的成绩为&#xff1a;A&#xff0c;A&#xff0c;A&#xff0c;A&#xff0c;B&#xff0c;B-……想得到的成绩汇总求和为&#xff1a;2A,2A,1B,1B- 如果在低版本里&#xff0c;用公式计算可能相当复杂&#xff0c;但是有了TEXTJOIN函数和UNIQUE函数&…

校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)

校园交友网站 目录 基于SprinBootvue的校园交友网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#x…

CSS学习笔记:bootstrap的介绍、下载、使用及响应式布局的实现

介绍 Bootstrap 是由 Twitter 公司开发维护的前端 UI 框架&#xff0c;它提供了大量编写好的CSS 样式 bootstrap过时了吗&#xff1f; 其实在学bootstrap这一部分的网课时&#xff0c;在弹幕上看到一些同学说bootstrap已经过时了&#xff0c;这里谈谈我的看法 我的前端学习…