九、综合实例:修改用户资料(Qt5 GUI系列)


目录

一、设计需求

二、实现代码

三、代码解析

四、总结


一、设计需求

        设计一个修改用户资料功能的对话框,要求包含基本信息、联系方式、详细资料的编辑和修改。本实例只实现界面。

二、实现代码

导航页面:

//添加的头文件
#include <QStackedWidget>
#include <QPushButton>
#include "baseinfo.h"
#include "contact.h"
#include "detail.h"class Content : public QFrame
{Q_OBJECT
public:Content(QWidget *parent=0);QStackedWidget *stack;QPushButton *AmendBtn;QPushButton *CloseBtn;BaseInfo  *baseInfo;Contact *contact;Detail *detail;
};
#include "content.h"Content::Content(QWidget *parent):QFrame(parent)
{//创建一个QStackedWidget对象stack =new QStackedWidget(this);//设置堆栈窗口的显示风格stack->setFrameStyle(QFrame::Panel|QFrame::Raised);//新建基本信息、联系方式、详细资料三个页面baseInfo =new BaseInfo();contact =new Contact();detail =new Detail();//依次插入三个页面stack->addWidget(baseInfo);stack->addWidget(contact);stack->addWidget(detail);//创建连个按钮,并对其布局AmendBtn =new QPushButton(tr("修改"));CloseBtn =new QPushButton(tr("关闭"));QHBoxLayout *BtnLayout =new QHBoxLayout;BtnLayout->addStretch(1);BtnLayout->addWidget(AmendBtn);BtnLayout->addWidget(CloseBtn);//进行整体布局QVBoxLayout *RightLayout =new QVBoxLayout(this);RightLayout->setMargin(10);RightLayout->setSpacing(6);RightLayout->addWidget(stack);RightLayout->addLayout(BtnLayout);
}

基本信息:

//添加的头文件
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QTextEdit>
#include <QGridLayout>
#include <QPushButton>class BaseInfo : public QWidget
{Q_OBJECT
public:BaseInfo(QWidget *parent=0);
private://左侧//QLabel *UserNameLabel;QLabel *NameLabel;QLabel *SexLabel;QLabel *DepartmentLabel;QLabel *AgeLabel;QLabel *OtherLabel;QLineEdit *UserNameLineEdit;QLineEdit *NameLineEdit;QComboBox *SexComboBox;QTextEdit *DepartmentTextEdit;QLineEdit *AgeLineEdit;QGridLayout *LeftLayout;//右侧//QLabel *HeadLabel;          //右上角部分QLabel *HeadIconLabel;QPushButton *UpdateHeadBtn;QHBoxLayout *TopRightLayout;QLabel *IntroductionLabel;QTextEdit *IntroductionTextEdit;QVBoxLayout *RightLayout;
};
#include "baseinfo.h"BaseInfo::BaseInfo(QWidget *parent) :QWidget(parent)
{/**** 左侧 ****/UserNameLabel =new QLabel(tr("用户名:"));UserNameLineEdit =new QLineEdit;NameLabel =new QLabel(tr("姓名:"));NameLineEdit =new QLineEdit;SexLabel =new QLabel(tr("性别:"));//新建QComboBox对象,并添加两个条目SexComboBox =new QComboBox;SexComboBox->addItem(tr("女"));SexComboBox->addItem(tr("男"));DepartmentLabel =new QLabel(tr("部门:"));DepartmentTextEdit =new QTextEdit;AgeLabel =new QLabel(tr("年龄:"));AgeLineEdit =new QLineEdit;OtherLabel =new QLabel(tr("备注:"));OtherLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);LeftLayout =new QGridLayout();LeftLayout->addWidget(UserNameLabel,0,0);LeftLayout->addWidget(UserNameLineEdit,0,1);LeftLayout->addWidget(NameLabel,1,0);LeftLayout->addWidget(NameLineEdit,1,1);LeftLayout->addWidget(SexLabel,2,0);LeftLayout->addWidget(SexComboBox,2,1);LeftLayout->addWidget(DepartmentLabel,3,0);LeftLayout->addWidget(DepartmentTextEdit,3,1);LeftLayout->addWidget(AgeLabel,4,0);LeftLayout->addWidget(AgeLineEdit,4,1);LeftLayout->addWidget(OtherLabel,5,0,1,2);LeftLayout->setColumnStretch(0,1);LeftLayout->setColumnStretch(1,3);/****右侧****/HeadLabel =new QLabel(tr("头像: "));                    //右上角部分HeadIconLabel =new QLabel;QPixmap icon("312.jpeg");HeadIconLabel->setPixmap(icon);HeadIconLabel->resize(icon.width(),icon.height());UpdateHeadBtn =new QPushButton(tr("更新"));TopRightLayout =new QHBoxLayout();TopRightLayout->setSpacing(20);TopRightLayout->addWidget(HeadLabel);TopRightLayout->addWidget(HeadIconLabel);TopRightLayout->addWidget(UpdateHeadBtn);IntroductionLabel =new QLabel(tr("个人说明:"));		//右下角部分IntroductionTextEdit =new QTextEdit;RightLayout =new QVBoxLayout();RightLayout->setMargin(10);RightLayout->addLayout(TopRightLayout);RightLayout->addWidget(IntroductionLabel);RightLayout->addWidget(IntroductionTextEdit);/*************************************/QGridLayout *mainLayout =new QGridLayout(this);mainLayout->setMargin(15);mainLayout->setSpacing(10);mainLayout->addLayout(LeftLayout,0,0);mainLayout->addLayout(RightLayout,0,1);//设置大小mainLayout->setSizeConstraint(QLayout::SetFixedSize);
}

联系方式:

//添加的头文件
#include <QLabel>
#include <QGridLayout>
#include <QLineEdit>
#include <QCheckBox>
class Contact : public QWidget
{Q_OBJECT
public:Contact(QWidget *parent=0);
private:QLabel *EmailLabel;QLineEdit *EmailLineEdit;QLabel *AddrLabel;QLineEdit *AddrLineEdit;QLabel *CodeLabel;QLineEdit *CodeLineEdit;QLabel *MoviTelLabel;QLineEdit *MoviTelLineEdit;QCheckBox *MoviTelCheckBook;QLabel *ProTelLabel;QLineEdit *ProTelLineEdit;QGridLayout *mainLayout;
};
#include "contact.h"Contact::Contact(QWidget *parent) :QWidget(parent)
{EmailLabel =new QLabel(tr("电子邮件:"));EmailLineEdit =new QLineEdit;AddrLabel =new QLabel(tr("联系地址:"));AddrLineEdit =new QLineEdit;CodeLabel =new QLabel(tr("邮政编码:"));CodeLineEdit =new QLineEdit;MoviTelLabel =new QLabel(tr("移动电话:"));MoviTelLineEdit =new QLineEdit;MoviTelCheckBook =new QCheckBox(tr("接收留言"));ProTelLabel =new QLabel(tr("办公电话:"));ProTelLineEdit =new QLineEdit;mainLayout =new QGridLayout(this);mainLayout->setMargin(15);mainLayout->setSpacing(10);mainLayout->addWidget(EmailLabel,0,0);mainLayout->addWidget(EmailLineEdit,0,1);mainLayout->addWidget(AddrLabel,1,0);mainLayout->addWidget(AddrLineEdit,1,1);mainLayout->addWidget(CodeLabel,2,0);mainLayout->addWidget(CodeLineEdit,2,1);mainLayout->addWidget(MoviTelLabel,3,0);mainLayout->addWidget(MoviTelLineEdit,3,1);mainLayout->addWidget(MoviTelCheckBook,3,2);mainLayout->addWidget(ProTelLabel,4,0);mainLayout->addWidget(ProTelLineEdit,4,1);mainLayout->setSizeConstraint(QLayout::SetFixedSize);
}

详细资料:

//添加的头文件
#include <QLabel>
#include <QComboBox>
#include <QLineEdit>
#include <QTextEdit>
#include <QGridLayout>
class Detail : public QWidget
{Q_OBJECT
public:Detail(QWidget *parent=0);
private:QLabel *NationalLabel;QComboBox *NationalComboBox;QLabel *ProvinceLabel;QComboBox *ProvinceComboBox;QLabel *CityLabel;QLineEdit *CityLineEdit;QLabel *IntroductLabel;QTextEdit *IntroductTextEdit;QGridLayout *mainLayout;
};
#include "detail.h"Detail::Detail(QWidget *parent) :QWidget(parent)
{NationalLabel =new QLabel(tr("国家/地址:"));NationalComboBox =new QComboBox;NationalComboBox->insertItem(0,tr("中国"));NationalComboBox->insertItem(1,tr("美国"));NationalComboBox->insertItem(2,tr("英国"));ProvinceLabel =new QLabel(tr("省份:"));ProvinceComboBox =new QComboBox;ProvinceComboBox->insertItem(0,tr("江苏省"));ProvinceComboBox->insertItem(1,tr("山东省"));ProvinceComboBox->insertItem(2,tr("浙江省"));CityLabel =new QLabel(tr("城市:"));CityLineEdit =new QLineEdit;IntroductLabel =new QLabel(tr("个人说明:"));IntroductTextEdit =new QTextEdit;mainLayout =new QGridLayout(this);mainLayout->setMargin(15);mainLayout->setSpacing(10);mainLayout->addWidget(NationalLabel,0,0);mainLayout->addWidget(NationalComboBox,0,1);mainLayout->addWidget(ProvinceLabel,1,0);mainLayout->addWidget(ProvinceComboBox,1,1);mainLayout->addWidget(CityLabel,2,0);mainLayout->addWidget(CityLineEdit,2,1);mainLayout->addWidget(IntroductLabel,3,0);mainLayout->addWidget(IntroductTextEdit,3,1);
}

主函数:

#include "content.h"
#include <QApplication>
#include <QTextCodec>
#include <QSplitter>
#include <QListWidget>int main(int argc, char *argv[])
{QApplication a(argc, argv);//设置整个程序采用的字体和字号QFont font("AR PL KaitiM GB",12);a.setFont(font);//新建一个水平分割对象,作为主布局框QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);//用于设置QSplitter对象在调整大小时是否使用不透明的方式进行绘制splitterMain->setOpaqueResize(true);//在水平分割窗左侧窗口插入QListWidget类对象QListWidget *list =new QListWidget(splitterMain);list->insertItem(0,QObject::tr("基本信息"));list->insertItem(1,QObject::tr("联系方式"));list->insertItem(2,QObject::tr("详细资料"));//在水平分割窗右侧窗口插入Content类对象Content *content =new Content(splitterMain);//连接列表框的currentRowChanged()信号与堆栈窗的setCuirentIndex()槽函数QObject::connect(list,SIGNAL(currentRowChanged(int)),content->stack,SLOT(setCurrentIndex(int)));//设置标题splitterMain->setWindowTitle(QObject::tr("修改用户资料"));splitterMain->setMinimumSize(splitterMain->minimumSize());splitterMain->setMaximumSize(splitterMain->maximumSize());splitterMain->show();return a.exec();
}

效果展示:


 

三、代码解析

        上述代码中,导航页面Content类继承QFrame而其他页面继承的是QWidget。下面具体阐述一下两者的联系与区别。

QFrameQWidget
继承关系继承自QWidget直接继承自QObject,是所有可视化部件的基类
功能带有边框和背景的可视化部件可视化部件,没有特定的样式或外观
外观可设置边框样式、背景色等不具有具体外观,需要在派生类中实现
默认样式有默认的边框样式无默认样式
容器能力可以作为容器类部件容纳其他子部件可以作为容器类部件容纳其他子部件
上级类/祖先类QWidget -> QObjectQObject
特殊用途擅长创建带有边框的部件提供基础的可视化功能

四、总结

        QDialog是Qt框架中的一个类,用于创建对话框窗口(Dialog)。对话框通常用于与用户进行简单的交互,例如显示消息、提示用户输入或选择选项等。
        QDialog是QWidget的子类,因此它继承了QWidget的一些基本功能。同时,QDialog还提供了一些特定于对话框的功能和属性,以便更好地满足对话框的需求。
        QDialog类具有以下特点和功能:
        模态或非模态:QDialog可以使用setModal(true)设置为模态对话框,即在对话框关闭之前阻止对父窗口的操作。默认情况下,对话框是非模态的。
        按钮:QDialog通常包括一个或多个按钮用于确认、取消或执行其他操作。可以使用addButton()方法添加按钮,并可以设置预定义的标准按钮(如Ok、Cancel、Yes、No等)。
        结果返回:QDialog可以通过执行exec()方法来显示对话框,并在关闭对话框时返回一个结果码用于判断用户的选择。
        布局管理:可以使用布局管理器(如QVBoxLayout)来管理对话框中的控件和部件的位置和大小。
        标题和图标:可以为对话框设置标题和图标。
        大小调整:可以设置对话框的大小调整方式,例如固定大小、自动拉伸等。

        QDialog为开发者提供了一种方便的方式来创建和管理对话框窗口,并与用户进行交互。可以根据需求,自定义对话框的外观和行为,以实现特定的交互效果。

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

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

相关文章

深入理解Python中的二分查找与bisect模块

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

安装Cygwin的包管理器apt-cyg并安装tree命令

文章目录 一、从官网添加必要软件包1. 安装2. 检查 二、安装apt-cyg1. 下载安装2.修复 三、安装tree命令1. 安装2.检验 一、从官网添加必要软件包 1. 安装 因为第一次安装cygwin时走的都是默认选项&#xff0c;所以这里是二次添加额外包。 打开官网&#xff0c;下载安装程序。…

【导出与导入Virtualbox虚拟机和启动连接openGauss数据库】

【导出与导入Virtualbox虚拟机和启动连接openGauss数据库】 一、导出虚拟机二、导入虚拟机三、启动数据库四、使用Data Studio连接数据库 一、导出虚拟机 选择关机状态的虚拟机 -> 管理菜单 -> 导出虚拟电脑 点击完成后&#xff0c;需要等待一小段时间&#xff0c;如…

每日一道算法题day-three(备战蓝桥杯)

哈喽大家好&#xff0c;今天来给大家带来每日一道算法题系列第三天&#xff0c;让我们来看看今天的题目&#xff0c;一起备战蓝桥杯 题目&#xff1a; 小 Y的桌子上放着 n 个苹果从左到右排成一列&#xff0c;编号为从 11 到 n。 小苞是小 Y 的好朋友&#xff0c;每天她都会…

Java JDK8到21演升特性汇总

Java JDK 8 到 19 演升特性汇总 文章目录 Java JDK 8 到 19 演升特性汇总一、版本roadmap图二、版本与特性JDK8 [2014-03-18]JDK11[2018-09-25]JDK17【2021-09-14】JDK21 [2023-09-19] 一、版本roadmap图 官方地址 JDK8,JDK11,JDK17,JDK21是长期维护的版本。spring boot3最低支…

D-Link DES-108 交换机

D-Link DES-108 交换机 1. 百兆交换机 8 口References ​ D-Link Corporation is a Taiwanese multinational networking equipment manufacturing corporation headquartered in Taipei, Taiwan. Taiwanese&#xff1a;adj. 台湾的 n. 台湾人 headquarter [hedkwɔ:tə]&#…

汽车电子学习总结

国内的主要有比亚迪、联合汽车电子&#xff08;联电&#xff09;、麦格米特、上海电驱动&#xff1b;国外的主要有欧美系的博世、麦格纳、大陆、博格华纳&#xff1b;日系的电装、电产等公司。

AIOps探索 | 基于大模型构建高效的运维知识及智能问答平台(2)案例分享

原作者&#xff1a;擎创科技产品专家 布博士 案例分享 所需要的软件列表 本次案例的实现&#xff0c;全部采用开源或SAAS的产品来提供&#xff0c;并不涉及到私有化部署的软件产品。软件列表如下所示&#xff0c;如何申请apikey请自行研究&#xff0c;在这里不再详细说明&…

VIT用于图像分类 学习笔记(附代码)

论文地址&#xff1a;https://arxiv.org/abs/2010.11929 代码地址&#xff1a;https://github.com/bubbliiiing/classification-pytorch 1.是什么&#xff1f; Vision Transformer&#xff08;VIT&#xff09;是一种基于Transformer架构的图像分类模型。它将图像分割成一系列…

如何实现安卓端与苹果端互通

在移动应用开发中&#xff0c;如何实现安卓端和苹果端的互通是一个重要的问题。二者缺少一个都会有损失&#xff0c;那如何实现安卓端跟苹果端互通&#xff0c;下面简单的介绍几点方法来帮助你再不同的平台上实现数据交互和功能互通。 基于Web技术 使用Web技术是一种常见并且…

数字孪生与大数据和分析技术的结合

数字孪生与大数据和分析技术的结合可以为系统提供更深入的见解、支持实时决策&#xff0c;并优化模型的性能。以下是数字孪生在大数据和分析技术中的一些应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

美年大健康黄伟:从选型到迁移,一个月升级核心数据库

核心生产系统的数据库&#xff0c;从接到替换需求到完成分布式升级&#xff0c;需要多久&#xff1f;一个月&#xff0c;这是美年大健康的回答。一个月集中调配各种资源&#xff0c;美年大健康完成了应用程序基本零改造的平滑迁移&#xff0c;新数据库在成本更低的前提下&#…

2023-RunwayML-Gen-2 AI视频生成功能发展历程

RunwayML是一个人工智能工具&#xff0c;它为设计师、艺术家和创意人士提供了一种简单的方式来探索和应用机器学习技术。 RunwayML官方网页地址&#xff1a;Runway - Advancing creativity with artificial intelligence. RunwayML专区RunwayML-喜好儿aigcRunwayML 是一种先进…

P1192 台阶问题————C++

目录 台阶问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 解题思路Code运行结果 台阶问题 题目描述 有 N N N 级台阶&#xff0c;你一开始在底部&#xff0c;每次可以向上迈 1 ∼ K 1\sim K 1∼K 级台阶&#xff0c;问到达第 N N N 级台阶有多少种不同方…

电商平台低价品牌要如何处理

低价会影响品牌渠道的长期发展&#xff0c;同时还会衍生很多问题&#xff0c;如为了追求低价而导致的店铺窜货、商品假货等&#xff0c;对于渠道来说&#xff0c;都是要及时解决的问题&#xff0c;否则渠道乱了&#xff0c;最终腐蚀的是品牌价值&#xff0c;同时还会影响经销商…

【LeetCode-剑指offer】--1.两数相除

1.两数相除 方法&#xff1a;使用减法实现除法 用“被减数”能减去几次“减数”来衡量最后的结果&#xff0c;这时候我们想到求x的幂次的快速解法&#xff0c;将x成倍成倍的求幂&#xff0c;这里将减数成倍成倍的增大&#xff0c;次数对应也是成倍成倍的增大&#xff0c;例如&…

虚幻UE 增强输入-第三人称模板增强输入分析与扩展

本篇是增强输入模块&#xff0c;作为UE5.0新增加的模块。 其展现出来的功能异常地强大&#xff01; 让我们先来学习学习一下第三人称模板里面的增强输入吧&#xff01; 文章目录 前言一、增强输入四大概念二、使用步骤1、打开增强输入模块2、添加IA输入动作2、添加IMC输入映射内…

【亚马逊云科技】自家的AI助手 - Amazon Q

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

C语言预备知识_hello world_数据类型_变量(入门到入神)

为什么要学习 C语言 学习 C语言是非常接近底层的一种编程语言C语言是学习其它编程语言第基础&#xff0c;基础不牢&#xff0c;地动山摇考研会用到 C语言 C语言预备知识 CPU 内存条 硬盘 显卡 主板 显示器之间的关系 当你在电脑上观看一部存储在硬盘上的电影时&#xff0c;各…

如何在 ChatGPT 上使用 Wolfram 插件回答数学问题

这里写自定义目录标题 写在最前面Wolfram是什么&#xff1f;ChatGPT 如何与 Wolfram 相结合&#xff0c;为什么有效&#xff1f;如何在 ChatGPT 上安装 Wolfram 插件&#xff1f; 写在最前面 参考&#xff1a;https://clickthis.blog/zh-CN/how-to-answer-math-questions-usin…