【Qt5开发及实例】7、综合:修改用户资料

给个目标实现以下:

代码展示,

首先创建一个项目,不要界面,选择基类是QDialog这个,后面名字的话随便改改

我的类名是:Content。

baseinfo.h

#include <QDialog>
#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;    //用户名的label
  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;   //垂直布局

};

contact.h

//添加的头文件
#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;
};

content.h

#ifndef CONTENT_H
#define CONTENT_H

#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;

};

#endif // CONTENT_H

detail.h

#ifndef DETAIL_H
#define DETAIL_H

//添加的头文件
#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;
};

#endif // DETAIL_H

baseinfo.cpp

#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("性别"));
  SexComboBox = new QComboBox;
  SexComboBox->addItem(tr("women"));
  SexComboBox->addItem(tr("man"));

  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.png");
  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);

}

contact.cpp

#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);
}

Content.cpp

#include "content.h"

Content::Content(QWidget *parent):QFrame(parent)
{
  stack = new QStackedWidget(this);
  stack->setFrameStyle(QFrame::Panel|QFrame::Raised); //设置框架的样式,这个是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);

}

detail.cpp

#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("江苏sheng"));
  ProvinceComboBox->insertItem(1, tr("山东sheng"));
  ProvinceComboBox->insertItem(2, tr("湖北sheng"));

  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);
}

main.cpp

/**
 *      出生
 *       ||
 *       ||
 *      \  /
 *       \/
 *      青年
 * (年龄 = rand(20,25)))    《==============
 *       ||                                                                 ||
 *       ||                                                                 ||
 *       ||        祝福所有开发工作者                         ||
 *       ||            永远年轻                                       ||
 *       ||                                                                 ||
 *      \  /                                                                ||
 *       \/                                                                 ||
 *( 20 <= 年龄 <= 25)        ===============
 *       ||
 *       ||
 *      \  /
 *       \/
 *     等死状态
 */

#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);
  splitterMain->setOpaqueResize(true);

  QListWidget *list = new QListWidget;
  list->insertItem(0, QObject::tr("基本信息"));
  list->insertItem(1, QObject::tr("联系方式"));
  list->insertItem(2, QObject::tr("详细资料"));

  Content *content = new Content(splitterMain);

  QObject::connect(list, SIGNAL(currentRowChanged(int)), content->stack, SLOT(setCurrentIndex(int)));

  splitterMain->addWidget(list);
  splitterMain->setWindowTitle(QObject::tr("修改用户资料"));
  splitterMain->setMinimumSize(splitterMain->minimumSize());
  splitterMain->setMaximumSize(splitterMain->maximumSize());
  splitterMain->show();

  return a.exec();
}

扛不住了,最近好多考试,这个玩意我得先放一放了,不然要是挂科了,那就GG思密达啦!!!

时间: 2024-10-31 13:42:57

【Qt5开发及实例】7、综合:修改用户资料的相关文章

【Qt5开发及实例】8、各种对话框!!

1.标准文件对话框 就是点击这个按钮就会打开文件的对话框 具体的实现是: 头文件dialog.h: #include <QDialog> #include <QLineEdit> #include <QGridLayout> //网格布局 #include <QPushButton> #include <iostream> #include "inputdlg.h" #include "msgboxdlg.h&quo

【Qt5开发及实例】27、获得文件的信息

fileinfo.h /** * 书本:[Qt5开发及实例] * 功能:获得文件的信息 * 文件:fileinfo.h * 时间:2015年2月4日17:23:38 * 作者:cutter_point */ #ifndef FILEINFO_H #define FILEINFO_H #include <QDialog> #include <QLabel> #include <QPushButton> #include <QLineEdit> #include

【Qt5开发及实例】17、一个对话框的坐标参数显示

一个对话框的坐标参数显示 介绍 这个是为了得到对话框的长宽,各个点的坐标,相对坐标,相对父窗口的坐标,相对在桌面的坐标 代码 geometry.h /** * 书本:[Qt5开发及实例] * 功能:显示对话框的坐标信息,参数信息 * 文件:geometry.cpp * 时间:2015年1月20日20:19:35 * 作者:cutter_point */ #ifndef GEOMETRY_H #define GEOMETRY_H #include <QDialog> #include <Q

【Qt5开发及实例】11、QPalette调色板使用

我做的这个不知道为什么有两个功能无法显示,也没有报错,我暂时是想不出什么好办法= = 实现目标 palette.h /** * 书本:[Qt5开发及实例] * 功能:实现调色板的使用QPalette * 文件:paletee.h * 时间:2015年1月3日12:21:53 * 作者:cutter_point */ #ifndef PALETTE_H #define PALETTE_H #include <QDialog> #include <QComboBox> #include

【Qt5开发及实例】16、实现一个简单的文本编辑器(over)

实现一个简单的文本编辑器 其他具体的代码基础看前面:http://blog.csdn.net/cutter_point/article/details/42839071 1.功能 这个程序又添加了文本编辑功能,什么加粗,斜体,下划线,字体设置,字号设置,文字排版,段落对齐功能. 2.代码全展示 头文件 showwidget.h /** * 书本:[Qt5开发及实例] * 功能:实现一个简单的文本编辑器 * 文件:showwidget.h * 时间:2015年1月18日10:03:21 * 作者:

《Qt5 开发与实例(第三版)》学习笔记(十)

1 // 3.5 『综合实例』 修改用户资料 2 //main.cpp 3 #include "content.h" 4 #include <QApplication> 5 #include <QTextCodec> 6 #include <QSplitter> 7 #include <QListWidget> 8 int main(int argc, char *argv[]) 9 { 10 QApplication a(argc, a

【Qt5开发及实例】24、数据柱形图显示

数据柱形图显示 1.我们首先把这个这个视图的表格部分表示出来 mainwindow.h /** * 书本:[Qt5开发及实例] * 功能:数据柱形图显示,这个类是表格显示 * 文件:mainwindow.h * 时间:2015年1月28日18:50:54 * 作者:cutter_point */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QStandardItemModel>

【Qt5开发及实例】25、实现代理的功能

实现代理的功能 在Qt里面也有MVC,那就是视图,模型,代理,后面我们再开一章,好好来学习一下Qt的MVC吧! main.cpp /** * 书本:[Qt5开发及实例] * 功能:实现代理的功能 * 文件:main.cpp * 时间:2015年1月29日20:53:04 * 作者:cutter_point */ #include <QApplication> #include <QStandardItemModel> #include <QTableView> //#i

【Qt5开发及实例】18、图形修饰小工具

图形修饰小工具 无力吐槽,这是我第三遍写这个了,到底是个什么意思???我只要一贴代码,浏览器直接崩溃,呵呵了,我也是,我现在只要写完一段字我就保存,尼玛在掉我就不写了,写到word里面,再贴上来. 效果 左边图形展示界面 paintarea.h /** * 书本:[Qt5开发及实例] * 功能:实现绘画各种图形 * 文件:paintarea.h * 时间:2015年1月21日16:59:25 * 作者:cutter_point */ #ifndef PAINTAREA_H #define PAI