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

    • 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_OBJECTpublic:// 构造函数,参数为父窗口指针,默认为空指针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.hint main(int argc, char *argv[]) // 定义main函数
{QApplication a(argc, argv); // 创建一个QApplication对象aLoginDialog *dlgLogin = new LoginDialog; // 创建一个LoginDialog对象dlgLoginif(dlgLogin->exec() == QDialog::Accepted) // 如果用户单击了“确定”按钮{MainWindow w; // 创建一个MainWindow对象ww.show(); // 显示MainWindow对象return a.exec(); // 进入主事件循环,等待应用程序退出}else // 如果用户单击了“取消”按钮或关闭了登录对话框{return 0; // 返回0,退出应用程序}
}

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

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

相关文章

vivado DDS学习

实现DDS通常有两种方式&#xff0c;一种是读取ROM存放的正弦/余弦信号的查表法&#xff0c;另一种是用DDS IP核。这篇学习笔记中&#xff0c;我们要讲解说明的是VIVADO DDS IP核的应用。 目前本篇默认Phase Generator and SIN/COS LUT&#xff08;DDS&#xff09;的standard模式…

【SpringCloud Nacos】 微服务治理介绍及Nacos引入初体验

文章目录 前言服务治理介绍什么是服务治理1、服务发现2、服务配置3、服务健康检测 常见的注册中心ZookeeperEurekaConsulNacos Nacos 简介Nacos 实战入门搭建nacos环境1、安装nacos2、配置nacos3、访问nacos 将商品微服务注册到 nacos1、在 pom. xml 中添加 nacos 的依赖2、在主…

spring cloud之分布式事务

写在前面 1&#xff1a;分布式事务介绍 参考MySQL之分布式事务 。 2&#xff1a;seata实战 架构图&#xff1a; 可以看到seata在这里作为协调者的角色&#xff0c;协调所有事务的提交以及回滚&#xff0c;其中seata使用MySQL存储每个分支事务的执行状态信息&#xff0c;以…

gitlab设置/修改克隆clone地址端口

最近由于公司要停测试库云服务器? 什么?要停测试库服务器??? 是的! 你没听错。 真是醉了,多大的集团,为了省钱,也真是拼了, 作为开发人员,没有测试服务器,犹如断臂之人。 所以,在之前搭建环境的时候都没有写文档,今天算是弥补上,以后都可以作为参考了, …

MySQL和Redis的事务有什么异同?

MySQL和Redis是两种不同类型的数据库管理系统&#xff0c;它们在事务处理方面有一些重要的异同点。 MySQL事务&#xff1a; ACID属性&#xff1a; MySQL是一个关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;支持ACID属性&#xff0c;即原子性&#xff08;Ato…

23种设计模式,你学废了嘛?【建议收藏起来】

23种经典设计模式共分为3种类型&#xff0c;分别是创建型、结构型和行为型。 今天&#xff0c;我们把这3种类型分成3个对应的小模块&#xff0c;逐一带你回顾一下每一种设计模式的原理、实现、设计意图和应用场景。 还是那句话&#xff0c;如果你看了之后&#xff0c;感觉都有…

Kafka3学习笔记

文章目录 一、Kafka概述和入门1、Kafka概述1.1 定义1.2 消息队列1.3 Kafka 基础架构 2、Kafka 快速入门2.1 安装部署2.2 集群启停脚本 3、Kafka 命令行操作3.1 Topic命令行操作3.2 生产者命令行操作3.3 消费者命令行操作 二、Kafka核心概念详解1、Kafka 生产者1.1 生产者消息发…

MySQL 多表查询

文章目录 多表关系一对多多对多一对一 查询合并查询&#xff08;笛卡尔积&#xff0c;会展示所有组合结果&#xff09;&#xff1a;内连接查询外连接查询自连接查询联合查询 union, union all子查询单行子查询列子查询行子查询表子查询 :::success 多表查询&#xff0c;也称为…

类和对象 第三部分第二小节:空指针访问成员函数

C中空指针也可以调用成员函数的&#xff0c;但是也要注意有没有用到this指针&#xff0c;如果有用到this指针&#xff0c;需要加以保证代码的健壮性 代码案例 出现报错 报错原因&#xff1a;因为新建的指针是空&#xff0c;所以this指代的对象为空&#xff0c;因此没有成员变量…

Flume1.9基础学习

文章目录 一、Flume 入门概述1、概述2、Flume 基础架构2.1 Agent2.2 Source2.3 Sink2.4 Channel2.5 Event 3、Flume 安装部署3.1 安装地址3.2 安装部署 二、Flume 入门案例1、监控端口数据官方案例1.1 概述1.2 实现步骤 2、实时监控单个追加文件2.1 概述2.2 实现步骤 3、实时监…

无人机路径优化(八):五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、五种算法&#xff08;DBO、LO、SWO、COA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发…

华为路由器IPv6基础配置

1. R2的两个接口均采用静态IPv6地址配置方法 2. R1的GigabitEthernet0/0/3接口采用无状态 地址配置 3. R3的GigabitEthernet0/0/3接口采用DHCPv6 的方式配置IPv6地址 R1配置 ipv6 #全局使能IPv6 interface GigabitEthernet0/0/0ipv6 enable ipv6 address auto link-local #为…

vue项目打包部署到服务器并使用cdn加速

配置 vue.config.js文件 const isProd process.env.NODE_ENV production module.exports {// 其他配置chainWebpack: config > {// 生产环境下使用CDNif (isProd) {config.plugin(html).tap(args > {args[0].cdn assetsCDNreturn args})}},// 生产环境下替换路径为c…

【Druid 登陆异常】

Druid 登陆异常 问题描述&#xff1a;页面登陆将请求参数放到请求体中导致无法通过request.getParameter 方式 服务加载流程 通过 DruidStatViewServletConfiguration 中方法 statViewServletRegistrationBean 初始化StatViewServlet 通过 com.alibaba.druid.support.jakarta…

【Android】在WSA安卓子系统中进行新实验性功能试用与抓包(2311.4.5.0)

前言 在根据几篇22和23的WSA抓包文章进行尝试时遇到了问题&#xff0c;同时发现新版Wsa的一些实验性功能能优化抓包配置时的一些步骤&#xff0c;因而写下此篇以作记录。 Wsa版本&#xff1a;2311.40000.5.0 本文出现的项目&#xff1a; MagiskOnWSALocal MagiskTrustUserCer…

Ultraleap 3Di示例Interactable Objects组件分析

该示例代码位置如下&#xff1a; 分析如下&#xff1a; Hover Enabled&#xff1a;悬停功能&#xff0c;手放在这个模型上&#xff0c;会触发我们手放在这个模型上的悬停功能。此时当手靠近模型的时候&#xff0c;手的模型的颜色会发生改变&#xff0c;反之&#xff0c;则不会…

Java服务端使用freemarker+wkhtmltoimage生成Echart图片

目录 1.通过 freemarker 将ftl转成html 1.1 freemarker 手册: 1.2 添加freemarker maven依赖 1.3 添加 echart-test.ftl 模版文件 1.4 添加 FreemarkerTool 工具类 1.5 添加测试main方法 1.6 运行,生成echart-test-时间戳.html 文件 2. 通过wkhtmltoimage将html 转为p…

数位dp,HDU 4151 The Special Number

一、题目 1、题目描述 In this problem, we assume the positive integer with the following properties are called ‘the special number’: 1) The special number is a non-negative integer without any leading zero. 2) The numbers in every digit of the special nu…

763. 划分字母区间 - 力扣(LeetCode)

题目描述 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。…

股票交易维度和概念

股票&#xff1a;股份公司为筹集资金而发行给各个股东作为持股凭证并借以取得股息和红利的一种有价证券 好处&#xff1a;分红、送股配股、交易收益、本金少、易变现、避免货币贬值 金融标的投资风险与收益 股票分类 蓝筹股 经营业绩长期稳定增长的大公司&#xff0c;一般是…