九、综合实例:修改用户资料(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,一经查实,立即删除!

相关文章

2401C++,实现文件服务器和聊天室

文件服务器 使用yalantinglibs,几行代码开发静态文件服务器 最近的workshop上的一个任务,就是实现一个文件服务器,只要设置下载目录之后,就可下载目录里面的文件. 看看用yalantinglibs怎么实现一个静态文件服务器的吧. coro_http::coro_http_server server(1, 9001); server.…

深入理解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;如…

JS实现/封装节流函数

封装节流函数 节流原理&#xff1a;在一定时间内&#xff0c;只能触发一次 let timer, flag; /*** 节流原理&#xff1a;在一定时间内&#xff0c;只能触发一次* * param {Function} func 要执行的回调函数 * param {Number} wait 延时的时间* param {Boolean} immediate 是否立…

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

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

HAproxy群集

HAproxy群集 常见的集群调度器HAproxy 、nginx、LVS区别HAproxynginxlvs HAproxy介绍HAproxy特点HAproxy常见的负载均衡策略HAproxy会话保持HAproxy配置实例 常见的集群调度器 常见的web集群调度器分为软件和硬件 软件&#xff1a;LVS Haproxy nginx 硬件&#xff1a; F5 Ar…

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架构的图像分类模型。它将图像分割成一系列…

Python-实现高并发的常见方式

高并发能帮支持快速处理大量执行任务&#xff0c;提高代码的执行效率&#xff0c;以下是在日常开发中常见的高并发方式 多线程&#xff08;Threading&#xff09; Python 的 threading 模块可以非常容易地创建和管理线程。线程共享内存空间&#xff0c;这意味着它们可以更高效的…

JS tostring()和join()方法

在JavaScript中&#xff0c;toString()和join()都是用于处理数组的方法。它们的功能和用法如下&#xff1a; 1.toString()方法&#xff1a; toString()方法将数组转换为一个由每个元素字符串形式拼接而成的字符串。该方法不会改变原始数组&#xff0c;而是返回一个新的字符串。…

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

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

构建可伸缩和高性能系统的设计原则和最佳实践

在当今快节奏的软件开发环境中&#xff0c;构建可伸缩和高性能的系统对于满足用户需求至关重要。采用设计原则和最佳实践是确保系统具备良好性能和可扩展性的关键。本文将介绍一些构建可伸缩和高性能系统的设计原则和最佳实践。 1. 分布式架构 采用分布式系统架构&#xff0c…

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

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

2024阿里云服务器配置推荐方案

阿里云服务器配置怎么选择合适&#xff1f;CPU内存、公网带宽和ECS实例规格怎么选择合适&#xff1f;阿里云服务器网aliyunfuwuqi.com建议根据实际使用场景选择&#xff0c;例如企业网站后台、自建数据库、企业OA、ERP等办公系统、线下IDC直接映射、高性能计算和大游戏并发&…

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

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

迪拜公司注册优势 迪拜公司注册条件 迪拜公司注册流程

迪拜作为阿 拉伯联合酋长国&#xff08;United Arab Emirates&#xff0c;简称UAE&#xff09;的一个城市&#xff0c;拥有独特的优势和吸引力。以下是迪拜公司注册的优势、条件和流程&#xff1a; 迪拜公司注册优势 1、无外汇管制&#xff1a;在迪拜注册的公司可以自 由转移资…