【Qt】QDialog对话框

目录

一、概念

二、对话框的分类

2.1 模态对话框

2.2 非模态对话框

2.3 混合属性对话框

三、消息对话框QMessageBox

四、颜色对话框QColorDialog

五、文件对话框QFileDialog

六、字体对话框QFontDialog

七、输入对话框QInputDialog


一、概念

对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。Qt常用的内置对话框有:QFiledialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog(字体对话框)、QInputDialog(输入对话框)和QMessageBox(消息框)

二、对话框的分类

2.1 模态对话框

模态对话框指的是:显示后无法与父窗口进行交互,是一种阻塞式的对话框。使用QDialog::exec()函数调用。模态对话框使用于必须依赖用户选择的场合,如消息显示、文件选择,打印设置等

代码示例

在菜单项中,点击菜单项时就会触发triggered()信号

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QMenuBar* menubar = menuBar();this->setMenuBar(menubar);QMenu* menu1 = new QMenu("文件");QMenu* menu2 = new QMenu("编辑");menubar->addMenu(menu1);menubar->addMenu(menu2);QAction* action = new QAction("新建");menu1->addAction(action);QToolBar* toolbar = new QToolBar(this);this->addToolBar(toolbar);toolbar->addAction(action);//当点击新建时,弹出一个模态对话框connect(action, &QAction::triggered, [=](){QDialog dialog;dialog.resize(300, 200);dialog.exec();});
}MainWindow::~MainWindow()
{delete ui;
}

2.2 非模态对话框

非模态对话框显示后独立存在,可以同时与父窗口进行交互,是一种非阻塞式对话框,使用QDialog::show()函数调用

非模态对话框一般在堆上创建,若创建在栈上,弹出的非模态对话框就会一闪而过。

需设置Qt:WA_DeleteOnClose属性,目的是:当创建多个非模态对话框时(如打开了多个非模态窗口),为了避免内存泄漏要设置此属性

非模态对话框适用于特殊功能设置的场合,如查找操作,属性设置等

//当点击新建时,弹出一个模态对话框
connect(action, &QAction::triggered, [=](){//非模态对话框,创建在堆区,防止一闪而过QDialog* dialog = new QDialog(this);//调整尺寸dialog->resize(300, 200);//当dialog无限创建时,设置该属性可以在关闭非模态对话框时自动释放该对象,防止内存泄露dialog->setAttribute(Qt::WA_DeleteOnClose);dialog->show();
});

2.3 混合属性对话框

混合属性对话框同时具有模态对话框和非模态对话框的属性,对话框的生成和销毁具有非模态对话框属性,功能上具有模态对话框的属性

使用QDialog::setModal()函数可以创建混合特性的对话框。创建对话框时需要指定对话框的父组件

connect(action, &QAction::triggered, [=]() {QDialog* dialog = new QDialog(this);dialog->setAttribute(Qt::WA_DeleteOnClose);dialog->setModal(true);dialog->resize(300, 200);dialog->show();
});

三、消息对话框QMessageBox

消息对话框是应用程序中最常用的界面元素。消息对话框主要用于为用户提示重要信息,强制用户进行选择操作

QMessageBox类中定义了静态成员函数,可以直接调用创建不同风格的消息对话框:

Question用于正常操作过程中的提问
Information用于报告正常运行信息
Warning用于报告非关键错误
Critical用于报告严重错误

代码示例:问题提示消息对话框

其中可以设置的按钮的类型如下:

四、颜色对话框QColorDialog

颜⾊对话框的功能是允许用户选择颜色,继承自QDialog类

常用方法介绍

  • QColorDialog (QWidget *parent = nullptr) //创建对象的同时设置父对象
  • QColorDialog(const QColor &initial, QWidget *parent = nullptr) //创建对象的同时通过QColor对象设置默认颜色和父对象
  • void setCurrentColor(const QColor &color) //设置当前颜色对话框
  • QColor currentColor() const //获取当前颜色对话框
  • QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString&title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()) //打开颜色选择对话框,并返回⼀个QColor对象
  • void open(QObject *receiver, const char *member) //打开颜色对话框

代码示例

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);resize(800, 600);QPushButton* btn = new QPushButton("颜色对话框", this);//创建颜色对话框QColorDialog* cdlog = new QColorDialog(this);connect(btn, &QPushButton::clicked, [=]() {//打开颜色对话框,并设置默认颜色为红色QColor color = cdlog->getColor(QColor(255, 0, 0));qDebug() << "r = " << color.red();qDebug() << "g = " << color.green();qDebug() << "b = " << color.blue();});
}MainWindow::~MainWindow()
{delete ui;
}

五、文件对话框QFileDialog

文件对话框用于应用程序中需要打开一个外部文件或需要将当前内容存储到指定的外部文件

常用方法介绍

打开文件(一次只能打开一个文件)
QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

打开多个文件(一次可以打开多个文件)
QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(),const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

保存文件
QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(),const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())

  • parent        父亲
  • caption        对话框标题
  • dir        默认打开的路径
  • filter        文件过滤器

代码示例:打开文件

代码示例:保存文件

六、字体对话框QFontDialog

Qt中提供了预定义的字体对话框类QFontDialog,用于提供选择字体的对话框部件

七、输入对话框QInputDialog

Qt中提供了预定义的输入对话框类:QInputDialog,用于进行临时数据输入的场合

整型输入数据对话框

双精度浮点型输入数据对话框 

选择条目型输入数据框 

参数说明:

  • parent:父亲
  • title:对话框标题
  • label:对话框标签
  • items:可供选择的条目

代码示例:浮点型数据输入对话框

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

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

相关文章

Java中HashMap底层数据结构及主要参数?

在Java中&#xff0c;HashMap的底层数据结构主要基于数组和链表&#xff0c;同时在Java 8及以后的版本中&#xff0c;当链表长度超过一定阈值时&#xff0c;链表会转换为红黑树来优化性能。这种结构结合了数组和链表的优点&#xff0c;既提供了快速的随机访问&#xff0c;又允许…

Unity角色多人同步

1.位置同步和状态同步&#xff1a;需要同步的节点上挂载脚本&#xff1a; gameObject.AddComponent<SyncTransform>(); ; //同步gameObject.GetComponent<SyncTransform>().syncId SyncUtilFunc.GetRoleSyncId(PlayerData.Instance.PlayerId); //同步gameObject.G…

电子元器件批发商城对供应链管理的影响与创新

电子元器件批发商城对供应链管理的影响与创新是十分重要的&#xff0c;以下是其主要影响和创新&#xff1a; 提高供应链效率&#xff1a;电子元器件批发商城通过将多个供应商的产品整合在一个平台上&#xff0c;简化了采购流程&#xff0c;降低了采购成本。采购人员可以通过一个…

有关在容器化的Jenkins中运行Docker服务记录

前提 Jenkins是容器化部署的&#xff0c;目前有后端Java的部署任务&#xff0c;完成打包生成jar包后&#xff0c;需要运行Dockerfile&#xff0c;打包生成镜像&#xff0c;进行了一些实践 参考文章 https://hackmamba.io/blog/2022/04/running-docker-in-a-jenkins-container…

算法训练day52leetcode198. 打家劫舍 213 打家劫舍2337. 打家劫舍 III

198. 打家劫舍 题目分析 动态规划数组初始化&#xff1a; dp[0]被初始化为0&#xff0c;因为没有房屋可以盗窃时的最大金额为0。dp[1]被初始化为nums[0]&#xff0c;意味着如果只有一家房屋&#xff0c;盗贼将盗取这家的金额。dp[2]被初始化为std::max(nums[0], nums[1])&am…

Qt定时器类QTimer

参考原文链接&#xff1a;https://blog.csdn.net/weixin_43780415/article/details/131389737 Qt定时器类QTimer是一个用于重复执行或延迟执行函数的类。它可以在一定时间间隔内发送一个信号&#xff0c;也可以在指定的时间后发送一个信号。QTimer是一个基于事件的定时器&#…

Python列表实现石头剪刀布游戏

import randomgamelist [石头,剪刀,布] winlist [[1,2],[2,3],[3,1]] lostlist [[1,3],[2,1],[3,2]] resultlist ["你赢了&#xff01;","你输了&#xff01;","打了个平手&#xff01;"] #翻译牌 def translate(number):tra ""i…

鸿蒙OS开发实例:【工具类封装-页面路由】

import common from ohos.app.ability.common; import router from ohos.router 封装app内的页面之间跳转、app与app之间的跳转工具类 【使用要求】 DevEco Studio 3.1.1 Release api 9 【使用示例】 import MyRouterUtil from ../common/utils/MyRouterUtil MyRouterUtil…

giteed的使用

1. 将工作区的内容添加到暂存区 你的工作区要有内容&#xff08;.git 不算&#xff09; 注意&#xff1a;空文件可以添加&#xff0c;但是空文件夹不管 如果没有形成历史版本之前&#xff0c;暂存区的同名文件会被覆盖 //打开命令行&#xff0c;切换到 .git所在的目录&…

JVM常见垃圾收集算法

JVM常见垃圾收集算法 标记-清除算法复制算法标记-整理&#xff08;标记压缩&#xff09;算法分代收集算法新生代和老年代分代收集算法工作机制 面试题&#xff1a;为什么分代收集算法把堆分成年轻代和老年代&#xff1f; 标记-清除算法 最基础的算法&#xff0c;分标记和清除两…

MPI 学习-环境搭建及测试DEMO

MPI 学习-环境搭建及测试DEMO 1.网络配置2.搭建NFS服务器,用于共享数据,使每个节点看到相同的内容3.基于ubuntu22.04 docker容器,安装依赖(在计算节点上执行)4.设置免密登录(在每个计算节点的容器里执行)5.测试一:bash命令A.运行B.输出 6.测试二:简单收发测试A.代码B.编译运行C…

红队笔记8-CTF5打靶流程-CMS漏洞-多用户信息泄露(vulnhub)

目录 开头: 1.主机发现和端口扫描&#xff1a; 2.80端口-NanoCMS哈希密码信息泄露-后台getshell 3.提权-用户过多信息泄露 4.总结&#xff1a; 开头: 学习的视频是哔哩哔哩红队笔记&#xff1a; 「红队笔记」靶机精讲&#xff1a;LAMPSecurityCTF5 - 标准攻击链&#xff…

ByteTrack多目标跟踪——yolox_model代码详解

文章目录 yolox_modelYOLOPAFPNYOLOXHeadmodel损失计算初步筛选SimOTA 求解 附&#xff1a;网络结构Cls headCls_convsCls_preds Reg headReg_convsReg_preds Obj headObj_preds yolox_model yolox_model主要包括以下几个文件:yolox.py、yolo_pafpn.py以及yolo_head.py train时…

[AIGC] MySQL存储引擎详解

MySQL 是一种颇受欢迎的开源关系型数据库系统&#xff0c;它的强大功能、灵活性和开放性赢得了用户们的广泛赞誉。在 MySQL 中&#xff0c;有一项特别重要的技术就是存储引擎。在本文中&#xff0c;我们将详细介绍什么是存储引擎&#xff0c;以及MySQL中常见的一些存储引擎。 文…

Android Databinding 使用教程

Android Databinding 使用教程 一、介绍 Android Databinding 是 Android Jetpack 的一部分&#xff0c;它允许你直接在 XML 布局文件中绑定 UI 组件到数据源。通过这种方式&#xff0c;你可以更简洁、更直观地更新 UI&#xff0c;而无需编写大量的 findViewById 和 setText/…

go env 命令详解

文章目录 1.简介2.格式3.示例4.环境变量参考文献 1.简介 go env 用于查看和设置 Go 环境变量。 默认情况下 go env 输出格式为 Shell 脚本格式&#xff08;如 Windows 上是 batch 文件格式&#xff09;。如果指定变量名称&#xff0c;则只输出变量的值。 2.格式 go env [-j…

MySQL 看库大表

MySQL 看库大表 在MySQL中查看数据库中的“大表”&#xff08;即数据量大的表&#xff09;&#xff0c;主要是为了识别可能影响数据库性能的表。有几种方法可以帮助你找出这些表&#xff1a; 通过 INFORMATION_SCHEMA 数据库 MySQL的INFORMATION_SCHEMA数据库包含了数据库的元…

M芯片 mac配置Vulkan环境报错 Xcode

报错&#xff1a; Ignoring file ‘/usr/local/Cellar/glfw/3.3.4/lib/libglfw.3.3.dylib’: found architecture ‘x86_64’, required architecture ‘arm64’ Undefined symbols: Linker command failed with exit code 1 (use -v to see invocation) 解决&#xff1a;重新安…

linux 命令行下的计算器

!!! author 文章目录 1. echo 运算器, 推荐2. bc 计算器, 不推荐3. dc 计算器, 不推荐4. awk计算器. 推荐5. python. 推荐 1. echo 运算器, 推荐 限制是仅能在整数运算时使用 $ echo $((10534)) 70 优点,输入简洁, 支持运算表达式,支持16进制,10进制混合输入. 缺点,不支持浮点…

申请GeoTrust数字证书

GeoTrust介绍&#xff1a; 大家应该都不陌生&#xff0c;作为最老资格的一批国际大牌证书&#xff0c;GeoTrust的品牌效益和使用群体非常庞大。在数字证书领域也是当之无愧的龙头地位&#xff0c;作为Symantec和Digicert的子品牌&#xff0c;证书安全性能方面毋庸置疑&#xf…