当前位置: 首页 > article >正文

【Qt开发】对话框

目录

1,对话框的介绍

2,Qt内置对话框

2-1,消息对话框QMessageBox

2-2,颜色对话框QColorDialog

2-3,文件对话框QFileDialog

2-4,字体对话框QFontDialog

2-5,输入对话框QInputDialog


1,对话框的介绍

        QDialog表示一个对话框结构。对话框是用于与用户进行短暂交互的小型窗口,进而实现短期与用户交互。Qt 常用的内置对话框有:QFiledialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog(字体对话框)、QInputDialog(输入对话框)和 QMessageBox(消息框)。除了内置对话框外,还可以通过继承 QDialog 类并添加所需的控件来创建自己的对话框以满足特定的需求。

        对话框分为 模态对话框 非模态对话框

        模态对话框:当模态对话框打开时,用户必须先与该对话框交互完才能返回到主窗口,它是⼀种阻塞式的对话框。模态对话框通过调用 QDialog::exec() 方法来实现。

        非模态对话框:允许用户在不关闭对话框的情况下继续与主窗口交互。非模态对话框通过调用 QDialog::show() 方法来实现。

        下面来模拟实现自定义对话框。首先,需要新建C++ class文件,且继承 QDialog。

// 创建自定义对话框(新建C++文件,继承QDialog)

myQDialog::myQDialog(QWidget* parent) : QDialog(parent) // 重新设定构造函数是为了使用对象树功能

{

    // 创建控件,加入到对话框中

    QLabel* label = new QLabel("此处对话框", this);

}

// 点击一个按钮,出现一个对话框

void MainWindow::on_pushButton_clicked()

{

    // 创建对话框,并设置其属性

    myQDialog* dialog = new myQDialog(this);

    dialog->setWindowTitle("我名对话框");

    dialog->resize(400, 400);

    // show()方法显示非模态对话框

    // dialog->exec()方法展示模态对话框。弹出的时候代码会在exec这里阻塞,直到对话框关闭

    dialog->show();

    // 注意:防止用户多次点击,导致创建多个一样的对话框,这里还要把delete和关闭按钮的点击信号关联起来

    // setAttribute是Qt中用于给控件或窗口设置属性的方法

    // Qt::WA_DeleteOnClose属性的作用是当这个窗口关闭时,自动删除该对象所占用的内存

    dialog->setAttribute(Qt::WA_DeleteOnClose);

}

        当然,这里还可以通过图形化界面创建。图形化界面创建需要创建一个新的ui文件出来。

2,Qt内置对话框

        Qt 提供了多种可复用的对话框类型,即 Qt标准对话框。Qt 标准对话框全部继承于 QDialog类。常用标准对话框如下:

2-1,消息对话框QMessageBox

        消息对话框主要用于为用户提示重要信息,强制用户进行选择操作。其中,消息对话框更是可以创建不同风格的对话框形式。

// 创建警告消息图标的消息对话框

void MainWindow::on_pushButton_clicked()

{

    QMessageBox* messageBox = new QMessageBox(this);

    messageBox->setWindowTitle("我名消息对话框");

    messageBox->setText("警告消息图标");

    // 添加图标。QMessageBox内置了不同消息类型的图标

    messageBox->setIcon(QMessageBox::Warning);

    // 添加按钮。QMessageBox内置了自己独特的按钮

    messageBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel);

    // 自定义设置按钮。第二个参数是指定按钮的行为或语义

    //QPushButton* button = new QPushButton("按钮", messageBox);

    //messageBox->addButton(button, QMessageBox::AcceptRole);

    // 显示模态消息对话框。QMessageBox使用的场景更多是模态的

    // 当模态对话框关闭时exec函数返回,返回值是内置枚举按钮的数值,即用户点击了哪一个按钮

    int result = messageBox->exec();

    if (result == QMessageBox::Ok) {

        qDebug() << "Ok";

    } else if (result == QMessageBox::Save) {

        qDebug() << "Save";

    } else if (result == QMessageBox::Cancel) {

        qDebug() << "Cancel";

    }

    messageBox->setAttribute(Qt::WA_DeleteOnClose);

}

        这里说明一下 QMessageBox 内置独特的按钮。 QMessageBox 内置按钮有如下:

        除了上面创建消息对话框的形式外,这里还可以使用静态函数快速创建。

// 静态函数快速创建不同图标信息类型的对话框

void MainWindow::on_pushButton_clicked()

{

    // QMessageBox::warning是Qt提供的一个静态方法,用于快速显示一个带有“警告”图标的消息框

    QMessageBox::warning(this, "对话框标题", "对话框文本", QMessageBox::Cancel);

    // “错误”图标消息框。用于致命错误或严重问题

    // QMessageBox::critical(this, "对话框标题", "对话框文本", QMessageBox::Cancel);

    // “问号”图标。用于询问用户选择

    // QMessageBox::question(this, "对话框标题", "对话框文本",QMessageBox::Cancel);

    // “信息”图标。用于一般提示信息

    //QMessageBox::information(this,"对话框标题","对话框本",QMessageBox::Cancel);

}

2-2,颜色对话框QColorDialog

        颜色对话框的功能是允许用户选择颜色。继承自 QDialog类。颜色对话框如下图示:

        常法方法如下:

1、QColorDialog(QWidget* parent = nullptr) //创建对象的同时设置父对象

2、QColorDialog(const QColor &initial, QWidget* parent = nullptr) //创建对象的同时通过QColor 对象设置默认颜色和父对象

3、void setCurrentColor(const QColor &color) //设置当前颜⾊对话框

4、QColor currentColor() const //获取当前颜⾊对话框

5、QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions())  //打开颜⾊ 选择对话框,并返回⼀个QColor对象

6、void open(QObject* receiver, const char* member) //打开颜⾊对话框

参数说明:

        initial:设置默认颜色

        parent:设置父对象 

        title:设置对话框标题

        options:设置选项

        代码示例如下: 

// 创建颜色对话框

void MainWindow::on_pushButton_clicked()

{

    // 使用静态函数QColorDialog::getColor快速创建颜色对话框

    QColor color = QColorDialog::getColor(QColor(0,0,255), this, "选择颜色");

    qDebug() << color;

    // 基于用户选择的颜色,修改窗口的背景颜色。可以通过QSS的方式来设置

    // 方法一:通过Qt内置的QString来拼接

    /*QString style = "background-color: rgb(" + QString::number(color.red())

            + ", " + QString::number(color.green())

            + ", " + QString::number(color.blue()) + ")";*/

    // 方法二:使用C++字符数组

    char style[1024] = { 0 };

    sprintf(style, "background-color:rgb(%d, %d, %d)", color.red(), color.green(), color.blue());

    this->setStyleSheet(style);

}

2-3,文件对话框QFileDialog

        文件对话框用于应用程序中需要打开⼀个外部文件或需要将当前内容存储到指定的外部文件。常用方法如下:

1、打开⽂件(⼀次只能打开⼀个⽂件)

QString getOpenFileName(QWidget* parent=nullptr, const QString &caption=QString(), const QString &dir=QString(), const QString &filter=QString(), QString* selectedFilter=nullptr, QFileDialog::Options options=Options())

2、打开多个⽂件(⼀次可以打开多个⽂件)

QStringList getOpenFileNames(QWidget *parent=nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter=QString(), QString *selectedFilter=nullptr, QFileDialog::Options options=Options())

3、保存文件

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

参数说明:

        参数1:parent 父亲

        参数2:caption 对话框标题

        参数3:dir 默认打开的路径

        参数4:filter 文件过滤器

        打开文件代码示例如下:

        保存文件代码示例如下:

        当然,这里还可以使用内置的静态函数快速创建。

// 创建⽂件对话框QFileDialog

// 打开文件

void MainWindow::on_pushButton_clicked()

{

    QString filePath = QFileDialog::getOpenFileName(this);

    qDebug() << filePath;

}

// 保存文件

void MainWindow::on_pushButton_2_clicked()

{

    QString filePath = QFileDialog::getSaveFileName(this);

    qDebug() << filePath;

}

2-4,字体对话框QFontDialog

        字体对话框类 QFontDialog 用于提供选择字体的对话框部件。

代码示例一:

代码示例二:

// 创建字体对话框QFontDialog,将按钮设置为专门的字体

void MainWindow::on_pushButton_clicked()

{

     // 参数ok表示如果用户点击了“确定”,则 ok 被设为 true;如果点击“取消”或关闭窗口,则为 false

    bool ok = false;

    QFont font = QFontDialog::getFont(&ok);

    qDebug() << "ok = " << ok;

    qDebug() << font;

    ui->pushButton->setFont(font);

}

2-5,输入对话框QInputDialog

        输入对话框类QInputDialog 用于进行临时数据输入的场合。这里有双精度浮点型输入数据对话框getDouble、整型输⼊数据对话框getInt、选择条目型输入数据框选择条⽬型输⼊数据框getItem。

// 整型输⼊对话框QInputDialog::getInt

void MainWindow::on_pushButton_clicked()

{

    int result = QInputDialog::getInt(this, "整型输⼊对话框", "请输入一个整数: ", 1);

    qDebug() << result;

}

// 浮点数输⼊对话框

void MainWindow::on_pushButton_2_clicked()

{

    double result = QInputDialog::getDouble(this, "浮点数输入对话框", "请输入一个浮点数: ", 1.0);

    qDebug() << result;

}

// 条目输入对话框

void MainWindow::on_pushButton_3_clicked()

{

    QStringList items;

    items.push_back("110");

    items.push_back("119");

    items.push_back("120");

    QString item = QInputDialog::getItem(this, "条目输入对话框", "请输入条目: ", items);

    qDebug() << item;

}

相关文章:

【Qt开发】对话框

目录 1&#xff0c;对话框的介绍 2&#xff0c;Qt内置对话框 2-1&#xff0c;消息对话框QMessageBox 2-2&#xff0c;颜色对话框QColorDialog 2-3&#xff0c;文件对话框QFileDialog 2-4&#xff0c;字体对话框QFontDialog 2-5&#xff0c;输入对话框QInputDialog 1&…...

Ubuntu上进行VS Code的配置

1. 安装VS code sudo snap install code --classic 2. 安装GCC sudo apt install build-essential 3. 安装VS Code中文包 打开 VS Code 点击左侧活动栏中的扩展图标(或按Ctrl+Shift+X) 在搜索框中输入:Chinese (Simplified) 选择由 Microsoft 提供的 中文(简体)语言包…...

阴盘奇门 api数据接口

阴盘奇门&#xff0c;又称"道家阴盘遁甲"或"法术奇门"&#xff0c;与阳盘奇门(奇门排盘)并称"奇门双雄"。由王凤麟教授整合道家三式&#xff08;奇门、六壬、太乙&#xff09;精髓创立&#xff0c;独创行为风水与立体全息预测技术&#xff0c;广…...

2025年渗透测试面试题总结-匿名[校招]攻防研究员(应用安全)(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 匿名[校招]攻防研究员(应用安全) 基础部分 1. HTTP状态码 2. HTTP请求方法及作用 3. 网络分层及协议 OW…...

碰一碰发视频系统--基于H5场景开发

#碰一碰发视频# 旨在构建一个基于移动网页&#xff08;H5&#xff09;的视频“碰传”交互系统&#xff0c;提供类似华为/苹果设备 NFC 轻碰分享的便捷体验。其核心技术依赖于移动端可用的近场通信&#xff08;NFC 或 H5 相关 API&#xff09;和可靠的媒体数据传输方案。实现细节…...

MagicAnimate 论文解读:引入时间一致性的视频人物动画生成方法

1. 前言/动机 问题&#xff1a;现有动画生成方法缺乏对时间信息的建模&#xff0c;常常出现时间一致性差的问题 描述&#xff1a; 现有的动画生成方法通常采用帧变形&#xff08;frame-warping&#xff09;技术&#xff0c;将参考图像变形以匹配目标动作。尽管这类方法能生成较…...

QT使用说明

QT环境准备 推荐Ubuntu平台上使用&#xff0c;配置简单&#xff0c;坑少。 Ubuntu 20.04 安装 sudo apt-get install qt5-default -y sudo apt-get install qtcreator -y sudo apt-get install -y libclang-common-8-dev启动 qtcreatorHelloWorld 打开 Qt Creator。选择 …...

数据结构:递归(Recursion)

目录 示例1&#xff1a;先打印&#xff0c;再递归 示例2&#xff1a;先递归&#xff0c;再打印 递归的两个阶段 递归是如何使用栈内存 复杂度分析 递归中的静态变量 内存结构图解 递归&#xff1a;函数调用自己 必须有判断条件来使递归继续或停止 我们现在通过这两个示…...

Cesium快速入门到精通系列教程一:打造第一个Cesium应用

一、打造第一个Cesium应用 1、官方渠道下载Cesium&#xff08;可选择历史版本&#xff09; ​​GitHub Releases页面​​&#xff1a;https://github.com/CesiumGS/cesium/releases 访问 Cesium GitHub Releases&#xff0c;此处列出了所有正式发布的版本。 通过标签&#…...

力扣题解106:从中序与后序遍历序列构造二叉树

一、题目内容 题目要求根据二叉树的中序遍历序列和后序遍历序列来重建二叉树。具体来说&#xff0c;我们需要利用中序遍历序列和后序遍历序列的特点&#xff0c;通过递归的方法逐步构建出完整的二叉树。 中序遍历序列的特点是&#xff1a;左子树 -> 根节点 -> 右子树。后…...

Vue传参Props还是Pinia

Pinia 适用场景 全局状态管理 多个不相关组件需要共享数据需要跨页面/路由共享状态 复杂状态逻辑 包含多个相互关联的状态有复杂的状态修改逻辑 持久化需求 需要将状态保存到localStorage/sessionStorage页面刷新后需要恢复状态&#xff08;恢复最后一次修改的状态&#xff0…...

学习STC51单片机25(芯片为STC89C52RCRC)

每日一言 生活就像弹簧&#xff0c;你弱它就强&#xff0c;你强它就弱&#xff0c;别轻易认输。 ESP8266作为路由器模式&#xff08;AP模式&#xff09;也就是在局域网内可以有服务器的作用 那么我们需要将pc作为设备进行连接ESP的发射出来的WIFE 叫做这个AI啥的 也有可能叫做…...

宁夏农业科技:创新引领,赋能现代农业新篇章

在广袤的宁夏大地上&#xff0c;农业科技如同一股强劲的春风&#xff0c;吹拂着每一寸土地&#xff0c;为宁夏的农业发展注入了新的活力与希望。近年来&#xff0c;宁夏农业科技以其独特的创新力和实践力&#xff0c;不断推动着现代农业的转型升级&#xff0c;让这片古老的土地…...

Accelerate 2025北亚巡展正式启航!AI智御全球·引领安全新时代

近日&#xff0c;网络安全行业年度盛会Accelerate 2025北亚巡展正式在深圳启航&#xff01;智库专家、产业领袖及Fortinet高管、产品技术团队和300余位行业客户齐聚一堂&#xff0c;围绕“AI智御全球引领安全新时代”主题&#xff0c;共同探讨AI时代网络安全新范式。大会聚焦三…...

005学生心理咨询评估系统技术解析:搭建科学心理评估平台

学生心理咨询评估系统技术解析&#xff1a;搭建科学心理评估平台 在心理健康教育日益受重视的当下&#xff0c;学生心理咨询评估系统成为了解学生心理状态的重要工具。该系统涵盖试卷管理、试题管理等核心模块&#xff0c;面向管理员和用户两类角色&#xff0c;通过前台展示与…...

azure devops 系列 - 常用的task

任务在管道中执行操作。例如,任务可以构建应用、与 Azure 资源交互、安装工具或运行测试。任务是定义管道中自动化的构建基块。 运行作业时,所有任务都会按顺序依次运行。要在多个代理上并行运行同一组任务,或者在不使用代理的情况下运行某些任务,使用job。 Build Task …...

贪心算法应用:多重背包启发式问题详解

贪心算法应用&#xff1a;多重背包启发式问题详解 多重背包问题是经典的组合优化问题&#xff0c;也是贪心算法的重要应用场景。本文将全面深入地探讨Java中如何利用贪心算法解决多重背包问题。 多重背包问题定义 **多重背包问题(Multiple Knapsack Problem)**是背包问题的变…...

【保姆级教程】PDF批量转图文笔记

如果你有一个PDF文档&#xff0c;然后你想把它发成图文笔记emmm&#xff0c;最好再加个水印&#xff0c;你会怎么做&#xff1f; 其实也不麻烦&#xff0c;打开PDF文档&#xff0c;挨个截图&#xff0c;然后打开PS一张一张图片拖进去&#xff0c;再把水印图片拖进去&#xff0…...

Pytest Fixture 是什么?

Fixture 是什么&#xff1f; Fixture 是 Pytest 测试框架的核心功能之一&#xff0c;用于为测试函数提供所需的依赖资源或环境。它的核心目标是&#xff1a; ✅ 提供测试数据&#xff08;如模拟对象、数据库记录&#xff09; ✅ 初始化系统状态&#xff08;如配置、临时文件&a…...

Spring Boot 基础知识全面解析:快速构建企业级应用的核心指南

一、Spring Boot 概述&#xff1a;重新定义 Java 开发 1.1 什么是 Spring Boot&#xff1f; Spring Boot 是基于 Spring 框架的快速开发框架&#xff0c;旨在简化 Spring 应用的初始搭建及开发过程。它通过 「约定优于配置」&#xff08;Convention Over Configuration&#…...

数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握)

数据库系统概论&#xff08;十一&#xff09;SQL 集合查询 超详细讲解&#xff08;附带例题表格对比带你一步步掌握&#xff09; 前言一、什么是集合查询&#xff1f;二、集合操作的三种类型1. 并操作2. 交操作3. 差操作 三、使用集合查询的前提条件四、常见问题与注意事项五、…...

[mcu]系统频率

系统主频的选择直接影响性能、功耗和成本&#xff0c;不同厂商的芯片会根据应用场景设计不同的运行频率。 低频段80MHZ~160MHz 典型频率&#xff1a; 80MHz、120MHz、160MHz 特点&#xff1a; 低功耗&#xff0c;适合电池供电设备 处理能力有限&#xff0c;通常仅支持 单天线…...

clickhouse如何查看操作记录,从日志来查看写入是否成功

背景 插入表数据后&#xff0c;因为原本表中就有数据&#xff0c;一时间没想到怎么查看插入是否成功&#xff0c;因为对数据源没有很多的了解&#xff0c;这时候就想怎么查看下插入是否成功呢&#xff0c;于是就有了以下方法 具体方法 根据操作类型查找&#xff0c;比如inse…...

5G-A:开启通信与行业变革的新时代

最近&#xff0c;不少细心的用户发现手机信号标识悄然发生了变化&#xff0c;从熟悉的 “5G” 变成了 “5G-A”。这一小小的改变&#xff0c;却蕴含着通信技术领域的重大升级&#xff0c;预示着一个全新的通信时代正在向我们走来。今天&#xff0c;就让我们深入了解一下 5G-A&a…...

鸿蒙OS在UniApp中集成Three.js:打造跨平台3D可视化应用#三方框架 #Uniapp

在UniApp中集成Three.js&#xff1a;打造跨平台3D可视化应用 引言 在最近的一个项目中&#xff0c;我们需要在UniApp应用中展示3D模型&#xff0c;并实现实时交互功能。经过技术选型和实践&#xff0c;我们选择了Three.js作为3D渲染引擎。本文将分享我们在UniApp中集成Three.…...

Vue 3 组件化设计实践:构建可扩展、高内聚的前端体系

Vue 3 自发布以来&#xff0c;其引入的 Composition API 与改进的组件模型&#xff0c;为前端架构提供了更强的可组合性、复用性与模块化能力。本文将系统性探讨 Vue 3 如何通过组件化设计&#xff0c;实现复杂应用的解耦、扩展与维护&#xff0c;并结合实际工程经验提供最佳实…...

腾讯云 Python3.12.8 通过yum安装 并设置为默认版本

在腾讯云服务器上&#xff0c;直接通过 yum 安装 Python 3.12.8 可能不可行&#xff0c;因为标准仓库通常不包含最新的 Python 版本。不过&#xff0c;我们可以通过添加第三方仓库或手动安装 RPM 包的方式实现。以下是完整解决方案&#xff1a; 方法 1: 通过第三方仓库安装&am…...

鸿蒙OSUniApp页面切换动效实战:打造流畅精致的转场体验#三方框架 #Uniapp

UniApp页面切换动效实战&#xff1a;打造流畅精致的转场体验 引言 在移动应用开发中&#xff0c;页面切换动效不仅能提升用户体验&#xff0c;还能传达应用的品质感。随着HarmonyOS的普及&#xff0c;用户对应用的动效体验要求越来越高。本文将深入探讨如何在UniApp中实现流畅…...

React 泛型组件:用TS来打造灵活的组件。

文章目录 前言一、什么是泛型组件&#xff1f;二、为什么需要泛型组件&#xff1f;三、如何在 React 中定义泛型组件&#xff1f;基础泛型组件示例使用泛型组件 四、泛型组件的高级用法带默认类型的泛型组件多个泛型参数 五、泛型组件的实际应用场景数据展示组件表单组件状态管…...

TDengine 集群运行监控

简介 为了确保集群稳定运行&#xff0c;TDengine 集成了多种监控指标收集机制&#xff0c;并通过 taosKeeper 进行汇总。taosKeeper 负责接收这些数据&#xff0c;并将其写入一个独立的 TDengine 实例中&#xff0c;该实例可以与被监控的 TDengine 集群保持独立。TDengine 中的…...