对话框与多窗体设计 —— 自定义对话框及其调用

news2024/9/28 23:34:54

    • 3.2 自定义对话框及其调用
      • 3.3 Splash与登录窗口

3.2 自定义对话框及其调用

在一个应用程序设计中,为了实现一些特定的功能,必 须设计自定义对话框。自定义对话框的设计一般从 QDialog继承,并且可以采用UI设计器可视化地设计对 话框。对话框的调用一般包括创建对话框、传递数据给 对话框、显示对话框获取输入、判断对话框单击按钮的 返回类型、获取对话框输入数据等过程。

实例:

在这里插入图片描述

#ifndef MODIFYDIALOG_H
#define MODIFYDIALOG_H

#include <QDialog>

namespace Ui {
class ModifyDialog;
}

class ModifyDialog : public QDialog
{
    Q_OBJECT

public:
    // 构造函数,参数为父窗口指针,默认为空指针
    explicit ModifyDialog(QWidget *parent = nullptr);

    // 析构函数
    ~ModifyDialog();

    // 设置姓名和年龄的函数,接受姓名和年龄作为参数
    void set_name_age(const QString& name, int age);

    // 获取姓名的函数,返回姓名字符串
    QString get_name();

    // 获取年龄的函数,返回整数年龄
    int get_age();

private:
    Ui::ModifyDialog *ui; // UI 指针

};

#endif // MODIFYDIALOG_H

#include "modifydialog.h"
#include "ui_modifydialog.h"

// 构造函数实现,接受父窗口指针,默认为空指针
ModifyDialog::ModifyDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ModifyDialog)
{
    ui->setupUi(this); // 初始化 UI
}

// 析构函数实现
ModifyDialog::~ModifyDialog()
{
    delete ui; // 释放 UI 指针的内存
}

// 设置姓名和年龄的函数实现,接受姓名和年龄作为参数
void ModifyDialog::set_name_age(const QString &name, int age)
{
    ui->sb_age->setValue(age);    // 设置年龄的SpinBox的值
    ui->le_name->setText(name);   // 设置姓名的LineEdit的文本
}

// 获取姓名的函数实现,返回姓名字符串
QString ModifyDialog::get_name()
{
    return ui->le_name->text();    // 获取姓名的LineEdit的文本
}

// 获取年龄的函数实现,返回整数年龄
int ModifyDialog::get_age()
{
    return ui->sb_age->value();    // 获取年龄的SpinBox的值
}

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "modifydialog.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    // 创建 ModifyDialog 对象,传入父窗口指针
    ModifyDialog *md = new ModifyDialog(this);

    // 对话框关闭时自动删除对话框对象,用于不需要读取返回值的对话框
    // 如果需要获取对话框的返回值,不能设置该属性,可以在调用完对话框后手动删除对话框
    // md->setAttribute(Qt::WA_DeleteOnClose);

    // 获取对话框的窗口标志
    Qt::WindowFlags flags = md->windowFlags();

    // 设置对话框固定大小
    md->setWindowFlags(flags | Qt::MSWindowsFixedSizeDialogHint);

    // 将主对话框中的信息传入到自定义对话框中
    md->set_name_age(ui->le_name->text(), ui->le_age->text().toInt());

    // 执行对话框,获取返回值
    int ret = md->exec();

    // 如果对话框被接受(OK按钮被点击)
    if (ret == QDialog::Accepted) {
        // 将对话框中获取的值更新到主窗口的LineEdit中
        ui->le_age->setText(QString::asprintf("%d", md->get_age()));
        ui->le_name->setText(md->get_name());
    }

    // 手动删除对话框
    delete md;
}

小结:

如果主程序中需要自定义窗口的信息,那就不要调用 setAttribute(Qt::WA_DeleteOnClose)设定自定义窗口 结束后自动销毁。当使用完毕后可以通过delete的方式 自定义窗口在运行期间想获取更多主窗口中的信息,可 以通过parentWidget()函数获取到主窗口句柄。

3.3 Splash与登录窗口

常用的窗体基类是QWidget、 QDialog和QMainWindow,在创建GUI应用程序时选择 窗体基类就从这3个类中选择。

在这里插入图片描述

一般大型应用程序在启动时会显示一个启动画面,即 Splash窗口。Splash窗口是一个无边框的对话框,一般 显示一个图片,展示软件的信息。Splash窗口显示时, 程序在后台做一些比较耗时的启动准备工作,Splash窗 口显示一段时间后自动关闭,软后软件的主窗口显示出 来。Qt有一个QSplashScreen类可以实现Splash窗口的 工作,它提供而来载入图片,自动设置窗口无边框效果 等功能。有的应用程序还有软件登录界面,要求用户输 入用户名和密码才可以进入软件。

在这里插入图片描述

#include "logindialog.h"
#include "ui_logindialog.h"

LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    ui->setupUi(this);

    // 设置对话框关闭时自动删除对象
    setAttribute(Qt::WA_DeleteOnClose);

    // 设置对话框的窗口标志为 SplashScreen  实现无边框效果
    setWindowFlags(Qt::SplashScreen);
}

LoginDialog::~LoginDialog()
{
    delete ui;
}

void LoginDialog::on_buttonBox_accepted()
{
    // 检查用户名和密码是否符合预期
    if (ui->le_name->text().trimmed() == "李钢蛋儿" &&
        ui->le_passwd->text().trimmed() == "123456") {
        // 符合预期则接受对话框
        return accept();
    } else {
        // 不符合预期则拒绝对话框
        return reject();
    }
}

#include "mainwindow.h" // 包含头文件mainwindow.h
#include <QApplication> // 包含头文件QApplication
#include "logindialog.h" // 包含头文件logindialog.h

int main(int argc, char *argv[]) // 定义main函数
{
    QApplication a(argc, argv); // 创建一个QApplication对象a
    LoginDialog *dlgLogin = new LoginDialog; // 创建一个LoginDialog对象dlgLogin
    if(dlgLogin->exec() == QDialog::Accepted) // 如果用户单击了“确定”按钮
    {
        MainWindow w; // 创建一个MainWindow对象w
        w.show(); // 显示MainWindow对象
        return a.exec(); // 进入主事件循环,等待应用程序退出
    }
    else // 如果用户单击了“取消”按钮或关闭了登录对话框
    {
        return 0; // 返回0,退出应用程序
    }
}

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

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

相关文章

发送消息提醒学习使用

效果图 数据库表及实体模型参考 创建消息事件模型 public class SystemMsgSendEvent implements DomainEvent {private String eventId;//事件idprivate ExecutePoint executePoint;//执行方式 事务提交后当前线程private OperateInfo operateInfo;//操作信息private String …

【AIGC】Diffusers:AutoPipeline自动化扩散生图管道

前言 &#x1f917; 扩散器能够完成许多不同的任务&#xff0c;并且您通常可以将相同的预训练权重用于多个任务&#xff0c;例如文本到图像、图像到图像和修复。但是&#xff0c;如果您不熟悉库和扩散模型&#xff0c;可能很难知道将哪个管道用于任务。例如&#xff0c;如果您…

【博客搭建记录贴】day4_Hexo基本操作,添加草稿并发布

目录 1.将项目导入到开发环境1.1 先把项目导入到IDEA中1.2 确认IDEA中服务器启动正常 2.Hexo基本操作: 添加草稿并发布2.1 生成一个草稿文件2.2 在页面上查看草稿3.3 将草稿正式发布 1.将项目导入到开发环境 我本地已经安装了 IntelliJ IDEA&#xff08;版本&#xff1a;社区版…

web蓝桥杯真题--13、水果摆盘

背景介绍 目前 CSS3 中新增的 Flex 弹性布局已经成为前端页面布局的首选方式&#xff0c;这次试题将利用 Flex 实现经典布局效果。 准备步骤 在开始答题前&#xff0c;你需要在线上环境终端中键入以下命令&#xff0c;下载并解压所提供的文件。 wget https://labfile.oss.a…

某马头条——day11+day12

实时计算和定时计算 流式计算 kafkaStream 入门案例 导入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusions><exclusion><artifactId>connect-json</artifactId&…

仿真机器人-深度学习CV和激光雷达感知(项目2)day04【简单例程】

文章目录 前言简单例程运行小海龟仿真启动节点查看计算图发布 Topic调用 Serviece 用 Python 发布和接收 Topic创建工作空间创建功能包&#xff0c;编译编写 Topic Publisher 节点编写 Topic Subscriber 节点运行节点 自定义消息类型用 Python 注册和调用 Serviece新建功能包在…

更高效的大模型调优方法,华盛顿大学推出“代理调优”

随着ChatGPT等生成式AI产品朝着多模态发展&#xff0c;基础模型的参数越来越高&#xff0c;想进行权重调优需要耗费大量时间和AI算力。 为了提升模型的调优效率&#xff0c;华盛顿大学和艾伦AI实验室的研究人员推出了全新方法——Proxy Tuning&#xff08;代理调优&#xff09…

YOLOv7全网独家首发:Powerful-IoU更好、更快的收敛IoU,效果秒杀CIoU、GIoU等 | 2024年最新IoU

💡💡💡本文独家改进:Powerful-IoU更好、更快的收敛IoU,是一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的损失函数 💡💡💡MS COCO和PASCAL VOC数据集实现涨点 收录 YOLOv7原创自研 https://blog.csdn.net/m0_63774211/category_12511937.htm…

arcgis 线要素shp数据处理

回顾 上篇写了arcgis 点shp数据处理之少数点和批量点坐标如何生成点要素&#xff0c;这个可能在做一些设计及查询中需要做的第一步。那么今天将对如何点集转线、线要素编辑数据处理做一记录。 一、工具 arcToolbox工具箱、编辑器 二、操作方法 1.点集转线 还是用上篇处理成…

解决软件找不到msvcp120.dll的五种方法,快速修复msvcp120.dll文件丢失方法

msvcp120.dll 是一个动态链接库文件&#xff0c;它是 Microsoft Visual C 2013 的一个部分&#xff0c;具体来说是 Microsoft Visual C Redistributable Package 的一部分。这个文件包含了微软的 C 运行时库&#xff08;CRT&#xff09;&#xff0c;特别是 C 标准库的部分&…

一、Lamdba 表达式与函数式接口(最终版)

一、Lamdba 表达式与函数式接口 1.1 Lamdba 表达式与函数式接口 1.1.1 Lambda 表达式概述 Lambda 表达式是 Java 8 引入的一个新特性Lambda 表达式可以被视为匿名函数允许在需要函数的地方以更简洁的方法定义功能Lambda 表达式可以完成简洁的函数定义Stream API 中大量使用了…

目标检测数据集 - MS COCO

文章目录 1. 数据集介绍2. 使用pycocotools读取数据3. 验证mAP 论文&#xff1a;Microsoft COCO: Common Objects in Context 网址&#xff1a;https://arxiv.org/abs/1405.0312 官网&#xff1a;https://cocodataset.org/ 1. 数据集介绍 MS COCO是一个非常大型&#xff0c;且…

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32EC11编码器实现增减调节及单击、双击、长按功能 &#x1f4fa;实现效果演示&#xff1a; &#x1f4d8;内容提要 &#x1f4dd;本文主要实现&#xff0c;通过STM32 HAL库开发&#xff0c;实现的EC11编码器功能&#xff0c;按键结合状态机思想实现的拓展单击、双击、…

docker-compose搭建redis集群

这里用docker-compose在一台机器搭建三主三从&#xff0c;生产环境肯定是在多台机器搭建&#xff0c;否则一旦这台宿主机挂了&#xff0c;redis集群全挂了&#xff0c;依然是单点故障。同时&#xff0c;受机器性能极限影响&#xff0c;其并发也上不去&#xff0c;算不上高并发。…

用二维码进行灭火器检查,消防巡检更轻松

传统的消防设备管理往往使用纸质巡检表&#xff0c;无法保证巡检人员是否前往现场&#xff0c;可能会存在漏检的情况&#xff0c;而且纸质表格不便于管理&#xff0c;容易造成数据丢失。 为了避免上述问题&#xff0c;可以在草料上搭建消防设备管理二维码系统。巡视人员扫码就…

docker 安装python3.8环境镜像并导入局域网

一、安装docker yum -y install docker docker version #显示 Docker 版本信息 可以看到已经下载下来了 拉取镜像python3镜像 二、安装docker 中python3环境 运行本地镜像&#xff0c;并进入镜像环境 docker run -itd python-38 /bin/bash docker run -itd pyth…

模型之地图染色与时间表制定

地图染色与时间表制定 “优化问题中的颜色选择和课程安排&#xff1a;最小颜色数和时间冲突的解决” 设想你正在绘制一幅地图&#xff0c;地图上分成了若干区域&#xff0c;你希望为这些区域选取颜色。你可能想选用尽可能少的颜色&#xff0c;但同时还希望避免任意两块相邻区…

网工每日一练(1月25日)

【说明】 某仓储企业网络拓扑结构如图1-1所示&#xff0c;该企业占地500亩。有五层办公楼1栋&#xff0c;大型仓库10栋。每栋仓库内、外部配置视频监控16台&#xff0c;共计安装视频监控160台&#xff0c;SwitchA、服务器、防火墙、管理机、RouterA等设备部署在企业办公楼一层的…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-后台管理主页面实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

书生·浦语大模型实战营-学习笔记6

目录 OpenCompass大模型测评1. 关于评测1.1 为什么要评测&#xff1f;1.2 需要评测什么&#xff1f;1.3 如何评测&#xff1f;1.3.1 客观评测1.3.2 主观评测1.3.3 提示词工程评测 2. 介绍OpenCompass工具3. 实战演示 OpenCompass大模型测评 1. 关于评测 1.1 为什么要评测&#…