QT-------------对话框和多窗口程序设计

一、标准对话框

1. QFileDialog 对话框
  • 功能:提供文件选择对话框,方便用户选择文件或目录。
#include <QApplication>
#include <QFileDialog>
#include <QMessageBox>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QString fileName = QFileDialog::getOpenFileName(nullptr, "Open File", QDir::homePath(), "All Files (*.*)");


    if (!fileName.isEmpty()) {
        QMessageBox::information(nullptr, "File Selected", "You selected: " + fileName);
    }


    return app.exec();
}
  • 代码解释
    • QFileDialog::getOpenFileName 用于打开文件选择对话框,参数依次为:父窗口、对话框标题、起始目录、文件过滤器。
    • 如果用户选择了文件(fileName 不为空),将弹出消息框显示选择的文件路径。
2. QColorDialog 对话框
  • 功能:允许用户选择颜色。
#include <QApplication>
#include <QColorDialog>
#include <QPushButton>
#include <QWidget>
#include <QVBoxLayout>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);


    QPushButton *button = new QPushButton("Choose Color");
    QObject::connect(button, &QPushButton::clicked, [&]() {
        QColor color = QColorDialog::getColor(Qt::white, &window);
        if (color.isValid()) {
            QMessageBox::information(&window, "Color Selected", "Color: " + color.name());
        }
    });


    layout->addWidget(button);


    window.show();


    return app.exec();
}
  • 代码解释
    • 创建一个按钮,点击按钮时弹出 QColorDialog
    • 使用 QColorDialog::getColor 获取用户选择的颜色,若有效则显示颜色名称。
3. QFontDialog 对话框
  • 功能:允许用户选择字体。
#include <QApplication>
#include <QFontDialog>
#include <QPushButton>
#include <QWidget>
#include <QVBoxLayout>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);


    QPushButton *button = new QPushButton("Choose Font");
    QObject::connect(button, &QPushButton::clicked, [&]() {
        QFont font = QFontDialog::getFont(nullptr);
        if (font.isValid()) {
            QMessageBox::information(&window, "Font Selected", "Font: " + font.family());
        }
    });


    layout->addWidget(button);


    window.show();


    return app.exec();
}
  • 代码解释
    • 创建一个按钮,点击按钮时弹出 QFontDialog
    • 使用 QFontDialog::getFont 获取用户选择的字体,若有效则显示字体族名称。
4. QProgressDialog 对话框
  • 功能:显示进度条,常用于长时间操作时向用户显示进度。
#include <QApplication>
#include <QProgressDialog>
#include <QTimer>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QProgressDialog progress("Progress", "Cancel", 0, 100);
    progress.setWindowTitle("Progress Dialog");


    QTimer timer;
    int value = 0;


    QObject::connect(&timer, &QTimer::timeout, [&]() {
        value++;
        progress.setValue(value);
        if (value >= 100) {
            timer.stop();
            progress.setValue(100);
        }
    });


    timer.start(100);


    progress.exec();


    return app.exec();
}
  • 代码解释
    • 创建 QProgressDialog 并设置范围。
    • 使用 QTimer 模拟进度更新,每秒更新一次进度,直到达到 100。

在这里插入图片描述

5. QMessageBox 消息对话框
  • 功能:用于显示消息、询问用户等。
#include <QApplication>
#include <QMessageBox>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QMessageBox::information(nullptr, "Message", "This is an information message");
    QMessageBox::question(nullptr, "Question", "Do you want to continue?", QMessageBox::Yes | QMessageBox::No);


    return app.exec();
}
  • 代码解释
    • QMessageBox::information 显示信息消息。
    • QMessageBox::question 显示询问对话框,用户可选择是或否。

二、设计和使用自定义对话框

1. QDialog 类
  • 功能:是所有对话框的基类,可以自定义对话框类。
#include <QApplication>
#include <QDialog>
#include <QVBoxLayout>
#include <QPushButton>


class CustomDialog : public QDialog
{
public:
    CustomDialog(QWidget *parent = nullptr) : QDialog(parent)
    {
        QVBoxLayout *layout = new QVBoxLayout(this);
        QPushButton *button = new QPushButton("Close", this);
        connect(button, &QPushButton::clicked, this, &QDialog::accept);
        layout->addWidget(button);
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    CustomDialog dialog;
    if (dialog.exec() == QDialog::Accepted) {
        // 用户点击关闭按钮
    }


    return app.exec();
}
  • 代码解释
    • 自定义 CustomDialog 类,包含一个按钮。
    • 点击按钮调用 accept 关闭对话框,根据 exec 的返回值判断对话框的关闭状态。
2. TDialogHeaders 对话框设计和使用(示例)
#include <QApplication>
#include <QDialog>
#include <QVBoxLayout>
#include <QPushButton>
#include <QHeaderView>


class TDialogHeaders : public QDialog
{
public:
    TDialogHeaders(QWidget *parent = nullptr) : QDialog(parent)
    {
        QVBoxLayout *layout = new QVBoxLayout(this);
        QPushButton *button = new QPushButton("Apply Headers", this);
        connect(button, &QPushButton::clicked, this, &QDialog::accept);
        layout->addWidget(button);


        // 可添加更多自定义组件,如 QHeaderView 相关设置
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    TDialogHeaders dialog;
    if (dialog.exec() == QDialog::Accepted) {
        // 用户点击 Apply Headers 按钮
    }


    return app.exec();
}
  • 代码解释
    • 创建自定义对话框,可添加 QHeaderView 等组件进行更多自定义操作。
3. TDialogLocate 对话框设计和使用(示例)
#include <QApplication>
#include <QDialog>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLineEdit>


class TDialogLocate : public QDialog
{
public:
    TDialogLocate(QWidget *parent = nullptr) : QDialog(parent)
    {
        QVBoxLayout *layout = new QVBoxLayout(this);
        QLineEdit *lineEdit = new QLineEdit(this);
        QPushButton *button = new QPushButton("Locate", this);
        connect(button, &QPushButton::clicked, this, &QDialog::accept);
        layout->addWidget(lineEdit);
        layout->addWidget(button);


        // 可添加更多自定义逻辑,如处理 lineEdit 输入
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    TDialogLocate dialog;
    if (dialog.exec() == QDialog::Accepted) {
        // 用户点击 Locate 按钮
    }


    return app.exec();
}
  • 代码解释
    • 创建自定义对话框,包含 QLineEdit 和按钮,可根据输入进行相应操作。

三、多窗口应用程序设计

1. 窗口类重要特性的设置
  • 可设置窗口的标题、大小、位置、可见性等属性。
#include <QApplication>
#include <QWidget>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QWidget window1;
    window1.setWindowTitle("Window 1");
    window1.resize(300, 200);
    window1.move(100, 100);
    window1.show();


    QWidget window2;
    window2.setWindowTitle("Window 2");
    window2.resize(300, 200);
    window2.move(500, 100);
    window2.show();


    return app.exec();
}
  • 代码解释
    • 创建两个窗口,设置不同的标题、大小和位置并显示。
2. 多窗口应用程序设计
  • 可以创建多个窗口并在它们之间进行交互。
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QDialog>


class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        QPushButton *button = new QPushButton("Open Dialog", this);
        setCentralWidget(button);


        connect(button, &QPushButton::clicked, this, [=]() {
            QDialog dialog(this);
            dialog.setWindowTitle("Dialog");
            dialog.exec();
        });
    }
};


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    MainWindow mainWindow;
    mainWindow.show();


    return app.exec();
}
  • 代码解释
    • 主窗口包含一个按钮,点击按钮打开一个对话框。

设计用例

  • 可以将上述不同的对话框和多窗口设计组合使用,例如:
    • 主窗口打开文件对话框选择文件。
    • 使用自定义对话框进行数据输入或设置。
    • 显示进度对话框进行长时间操作的进度显示。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 史丹&#xff0c;天津大学博士生 内容简介 大语言模型&#xff08;LLM&#xff09;经过海量数据训练后编码了丰富的世界知识。最近的研究表明&#xff0c…

在DJI无人机上运行VINS-FUISON(PSDK 转 ROS)

安装ceres出现以下报错&#xff0c;将2版本的ceres换成1版本的ceres CMake did not find one.Could not find a package configuration file provided by "absl" with any ofthe following names:abslConfig.cmakeabsl-config.cmakeAdd the installation prefix of …

A*算法与人工势场法结合的路径规划(附MATLAB源码)

A*算法与人工势场法&#xff08;APF&#xff09;结合实现路径规划 路径规划是机器人、无人机及自动驾驶等领域中的一个重要问题。本文结合了经典的 A* 算法与 人工势场法&#xff08;Artificial Potential Field, APF&#xff09;&#xff0c;实现了一种改进的路径规划方法。下…

SASS 简化代码开发的基本方法

概要 本文以一个按钮开发的实例&#xff0c;介绍如何使用SASS来简化CSS代码开发的。 代码和实现 我们希望通过CSS开发下面的代码样式&#xff0c;从样式来看&#xff0c;每个按钮的基本样式相同&#xff0c;就是颜色不同。 如果按照传统的方式开发&#xff0c;需要开发btn &…

Spring为什么要用三级缓存解决循环依赖?

1.什么是循环依赖 本文为了方便说明&#xff0c;先设置两个业务层对象&#xff0c;命名为AService和BService。其中Spring是如何把一个Bean对象创建出来的&#xff0c;其生命周期如下&#xff1a; 构造方法–> 不同对象 --> 注入依赖 -->初始化前 --> 初始化后–&…

R shiny app | 网页应用 空格分隔的文本文件在线转csv

shiny 能快速把R程序以web app的形式提供出来&#xff0c;方便使用&#xff0c;降低技术使用门槛。 本文提供的示例&#xff1a;把空格分隔的txt文件转为逗号分隔的csv文件。 前置依赖&#xff1a;需要有R环境(v4.2.0)&#xff0c;安装shiny包(v1.9.1)。括号内是我使用的版本…

LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 教程 (4)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144881432 大模型的 HTTP 服务,通过网络接口,提供 AI 模型功能的服务,允许通过发送 HTTP 请求,交互大模型,通常基于云计算架构,无需在本地部署复杂的模型和硬件,…

【《python爬虫入门教程11--重剑无峰168》】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 【《python爬虫入门教程11--selenium的安装与使用》】 前言selenium就是一个可以实现python自动化的模块 一、Chrome的版本查找&#xff1f;-- 如果用edge也是类似的1.chrome…

自定义Bitmap

使用场景 Bitmap 是一种使用 位数组&#xff08;bit array&#xff09; 来表示数据的结构&#xff0c;每一位&#xff08;bit&#xff09;表示一个值的状态。由于每个位只占用 1 bit&#xff0c;因此Bitmap 的存储效率非常高&#xff0c;特别适用于大数据去重、标记布尔值状态…

公司资产网站

本文结尾处获取源码。 本文结尾处获取源码。 本文结尾处获取源码。 一、相关技术 后端&#xff1a;Java、JavaWeb / Springboot。前端&#xff1a;Vue、HTML / CSS / Javascript 等。数据库&#xff1a;MySQL 二、相关软件&#xff08;列出的软件其一均可运行&#xff09; I…

第431场周赛:最长乘积等价子数组、计算字符串的镜像分数、收集连续 K 个袋子可以获得的最多硬币数量、不重叠区间的最大得分

Q1、最长乘积等价子数组 1、题目描述 给你一个由 正整数 组成的数组 nums。 如果一个数组 arr 满足 prod(arr) lcm(arr) * gcd(arr)&#xff0c;则称其为 乘积等价数组 &#xff0c;其中&#xff1a; prod(arr) 表示 arr 中所有元素的乘积。gcd(arr) 表示 arr 中所有元素的…

掌握RabbitMQ:全面知识点汇总与实践指南

前言 RabbitMQ 是基于 AMQP 高级消息队列协议的消息队列技术。 特点&#xff1a;它通过发布/订阅模型&#xff0c;实现了服务间的高度解耦。因为消费者不需要确保提供者的存在。 作用&#xff1a;服务间异步通信&#xff1b;顺序消费&#xff1b;定时任务&#xff1b;请求削…

国内Ubuntu环境Docker部署Stable Diffusion入坑记录

国内Ubuntu环境Docker部署Stable Diffusion入坑记录 本文旨在记录使用dockerpython进行部署 stable-diffusion-webui 项目时遇到的一些问题&#xff0c;以及解决方案&#xff0c;原项目地址: https://github.com/AUTOMATIC1111/stable-diffusion-webui 问题一览&#xff1a; …

SpringBoot3-深入理解自动配置类的原理(尚硅谷SpringBoot3-雷神)

文章目录 目录了解自动配置 一、导入对应场景的Mean依赖&#xff1a;1、引入依赖**找到自动配置类的所有配置都存放在哪里** 二、编写主程序&#xff1a;SpringBootApplication观察源码时所需要知道的几个核心注解&#xff1a;1、观察SpringBootApplication源码都做了什么 三、…

【沉默的羔羊心理学】汉尼拔的“移情”游戏:操纵与理解的艺术,精神分析学视角下的角色互动

终极解读《沉默的羔羊》&#xff1a;弗洛伊德精神分析学视角下的深层剖析 关键词 沉默的羔羊弗洛伊德精神分析学角色心理意识与潜意识性别与身份 弗洛伊德精神分析学简介 弗洛伊德的精神分析学是心理学的一个重要分支&#xff0c;主要关注人类行为背后的无意识动机和冲突。…

字玩FontPlayer开发笔记3 性能优化 大量canvas渲染卡顿问题

字玩FontPlayer开发笔记3 性能优化 大量canvas渲染卡顿问题 字玩FontPlayer是笔者开源的一款字体设计工具&#xff0c;使用Vue3 ElementUI开发&#xff0c;源代码&#xff1a; github: https://github.com/HiToysMaker/fontplayer gitee: https://gitee.com/toysmaker/fontpl…

javaEE-网络编程-3 UDP

目录 Socaket套接字 UDP数据报套字节编程 1.DatagrameSocket类 DatagramSocaket构造方法: DatagramSocaket常用方法&#xff1a; 2.DatagramPacket类 DatagramPacket构造方法&#xff1a; UDP回显服务器实现 UDP服务端实现&#xff1a; 创建一个Socket类对象&#xf…

Linux:操作系统不朽的传说

操作系统是计算机的灵魂&#xff0c;它掌控着计算机的硬件和软件资源&#xff0c;为用户和应用程序提供了一个稳定、高效、安全的运行环境。 在众多操作系统中&#xff0c;Linux 的地位举足轻重。它被广泛应用于服务器、云计算、物联网、嵌入式设备等领域。Linux 的成功离不开…

模拟出一个三维表面生成表面点,计算体积,并处理边界点

python代码 生成表面点,计算体积,并处理边界点,最终模拟出一个三维表面。 步骤: 初始参数设置: initial_fixed_point:一个初始固定点的坐标。 slop_thre:坡度阈值。 v_thre:体积阈值。 slope_rad:将坡度从度转换为弧度。 step_size:步长。 lam_x, lam_y:泊松分布的…

STM32拓展 低功耗案例1:睡眠模式 (register)

需求描述 让MCU进入睡眠模式&#xff0c;然后通过串口发送消息来唤醒MCU退出睡眠模式。观察LED在进入休眠模式后是否仍然开启。 思考 首先睡眠模式&#xff0c;唤醒的条件是中断&#xff0c;外部内部都可以&#xff0c;这里的串口接收中断时内部中断。 拓展&#xff1a;中断…