综合实例——修改用户资料

如何实现一个复杂的窗口布局,如何实用分割窗口以及堆栈窗口。

实现的目标界面如下:

1.导航页实现

content.h

#ifndef CONTENT_H
#define CONTENT_H
#include <QDialog>
#include <QPushButton>
#include <QStackedWidget>
#include <QWidget>
#include "baseinfo.h"
#include "contact.h"
#include "detail.h"
class Content : public QFrame
{
    Q_OBJECT

public:
    Content(QWidget *parent = nullptr);
    ~Content();
   // Content(QWidget *parent=0);
public:

    QStackedWidget *stack;
    QPushButton *btnAmend;
    QPushButton *btnClose;
    BaseInfo *baseinfo;
    Contact *contact;
    Detail *detail;

public slots:
    void setCurrentIndex(int t_index);
};
#endif // CONTENT_H

content.cpp

#include "content.h"
#include "baseinfo.h"
#include  <QDebug>
#include  <QHBoxLayout>
#include  <QVBoxLayout>
Content::Content(QWidget *parent)
    : QFrame(parent)
{

   stack=new QStackedWidget(this);

    //对堆栈口显式风格进行设置
   stack->setFrameStyle(QFrame::Panel|QFrame::Raised);//设置阴影和形状

   //创建三个界面
   BaseInfo *baseInfo=new BaseInfo(this);
   Contact *contact=new Contact(this);
   Detail *detail=new Detail(this);

   //将创建的三个界面插入堆栈窗体中
   stack->addWidget(baseInfo);
   stack->addWidget(contact);
   stack->addWidget(detail);

   //创建堆栈下面的按钮
   btnAmend=new QPushButton(QStringLiteral("修改 "));
   btnClose=new QPushButton(QStringLiteral("关闭 "));
   QHBoxLayout *btnLayout=new QHBoxLayout;
   btnLayout->addStretch(1);
   btnLayout->addWidget(btnAmend);
   btnLayout->addWidget(btnClose);

   //堆栈和按钮一起布局
   QVBoxLayout *RightLayout=new QVBoxLayout(this);
   RightLayout->setMargin(10);
   RightLayout->setSpacing(6);
   RightLayout->addWidget(stack);
   RightLayout->addLayout(btnLayout);
   this->setLayout(RightLayout);
}

Content::~Content()
{
}

void Content::setCurrentIndex(int t_index)//这个是我自己定义的
{
    //打印一下,看看信号发送的数字0,1,2, 异常结束说明
    qDebug()<<"t_index"<<t_index;
    stack->setCurrentIndex(t_index);//这句话有问题---发现没有
}

2.修改用户基本信息

(1)显示用户的基本信息

baseinfo.h

#ifndef BASEINFO_H
#define BASEINFO_H

#include <QWidget>
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QComboBox>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include<QPushButton>
class BaseInfo : public QWidget
{
public:
    explicit BaseInfo(QWidget *parent = nullptr);

private:

   //左侧
    QLabel *label_UserName;
    QLabel *label_Name;
    QLabel *label_Sex;
    QLabel *label_Age;
    QLabel *label_Department;
    QLabel *label_Other;

    QLineEdit *lineEdit_UserName;
    QLineEdit *lineEdit_Name;

    QComboBox *combox_Sex;
    QTextEdit *textEdit_Department;

    QLineEdit *lineEdit_Age;
    QGridLayout *Leftlayout;

    //右侧
    QLabel *label_head;
    QLabel *label_headIcon;
    QPushButton *btn_updateHead;
    QHBoxLayout *TopRightLayout;
    QLabel *IntroductionLabel;
    QTextEdit *IntroductionTextEdit;
    QVBoxLayout *RighetLayout;

    //底部
    QPushButton *btn_Ok;
    QPushButton *btn_Cancel;
    QHBoxLayout *ButtomLayout;
signals:

};

#endif // BASEINFO_H

baseinfo.cpp

#include "baseinfo.h"

BaseInfo::BaseInfo(QWidget *parent) : QWidget(parent)
{

    setWindowTitle(QStringLiteral("UserInfo"));
    //左侧
    label_UserName=new QLabel(this);
    //label_UserName=new QLabel(QStringLiteral("姓名"),this);

    label_Name=new QLabel(this);
    label_Sex=new QLabel(this);
    label_Age=new QLabel(this);
    label_Department=new QLabel(this);
    label_Other=new QLabel(this);

    lineEdit_UserName=new QLineEdit;
    lineEdit_Name=new QLineEdit;
    textEdit_Department=new QTextEdit;
    lineEdit_Age=new QLineEdit;
    combox_Sex=new QComboBox;
    combox_Sex->addItem(QStringLiteral(" 女  "));
    combox_Sex->addItem(QStringLiteral(" 男  "));
    label_Other->setFrameStyle(QFrame::Panel|QFrame::Sunken);

    label_UserName->setFixedSize(80,30);
    label_Name->setFixedSize(80,30);
    label_Sex->setFixedSize(80,30);
    label_Age->setFixedSize(80,30);
    label_Department->setFixedSize(80,30);
   // label_Other->setFixedSize(100,30);
    lineEdit_UserName->setFixedSize(320,30);
    lineEdit_Name->setFixedSize(320,30);
    lineEdit_Age->setFixedSize(320,30);
    label_Other->setFixedSize(400,30);

    label_UserName->setText(QStringLiteral("用户名:  "));
    label_Name->setText(QStringLiteral("姓名:  "));
    label_Sex->setText(QStringLiteral("性别:  "));
    label_Age->setText(QStringLiteral("年龄:  "));
    label_Department->setText(QStringLiteral("部门: "));
    label_Other->setText(QStringLiteral("备注:  "));


    //左侧网格布局
    QGridLayout *Leftlayout = new QGridLayout;
     Leftlayout->addWidget(label_UserName,0,0);
     Leftlayout->addWidget(lineEdit_UserName,0,1);
     Leftlayout->addWidget(label_Name,1,0);
     Leftlayout->addWidget(lineEdit_Name,1,1);

     Leftlayout->addWidget(label_Sex,2,0);
     Leftlayout->addWidget(combox_Sex,2,1);
     Leftlayout->addWidget(label_Department,3,0);
     Leftlayout->addWidget(textEdit_Department,3,1);

     Leftlayout->addWidget(label_Age,4,0);
     Leftlayout->addWidget(lineEdit_Age,4,1);
     Leftlayout->addWidget(label_Other,5,0,1,2);
     Leftlayout->setColumnStretch(0,1);
     Leftlayout->setColumnStretch(1,3);

     //右侧
     label_head=new QLabel(this);
     label_headIcon=new QLabel();
     label_headIcon->setPixmap(QPixmap(":/head/head/head.jpg"));
     label_headIcon->resize(15,15);
     btn_updateHead=new QPushButton(this);
     IntroductionLabel=new QLabel(this);
     IntroductionTextEdit=new QTextEdit;

     label_head->setText(QStringLiteral("头像:  "));
     btn_updateHead->setText(QStringLiteral("更新 "));
     IntroductionLabel->setText(QStringLiteral("个人说明:  "));

     label_head->setFixedSize(80,30);
     btn_updateHead->setFixedSize(120,30);
     IntroductionLabel->setFixedSize(120,30);

     //右侧头像定义布局
     QHBoxLayout *TopRightLayout=new QHBoxLayout();
     TopRightLayout->setSpacing(20);
     TopRightLayout->addWidget(label_head);
     TopRightLayout->addWidget(label_headIcon);
     TopRightLayout->addWidget(btn_updateHead);

     //完成右侧的布局
     QVBoxLayout* RighetLayout=new QVBoxLayout();
     RighetLayout->setMargin(10);
     RighetLayout->addLayout(TopRightLayout);
     RighetLayout->addWidget(IntroductionLabel);
     RighetLayout->addWidget(IntroductionTextEdit);


    //底部
     btn_Ok=new QPushButton(this);
     btn_Cancel=new  QPushButton(this);

     btn_Ok->setText(QStringLiteral("确定 "));
     btn_Cancel->setText(QStringLiteral("取消  "));


     btn_Ok->setFixedSize(120,30);
     btn_Cancel->setFixedSize(120,30);


     QHBoxLayout *ButtomLayout=new QHBoxLayout();
     ButtomLayout->addStretch();
     ButtomLayout->addWidget(btn_Ok);
     ButtomLayout->addWidget(btn_Cancel);


     //开辟一个界面,将左边整体放入大的界面中
     QWidget *pWidgetLeft = new QWidget(this);
     pWidgetLeft->setLayout(Leftlayout);

     //开辟一个界面,将右边整体放入大的界面中
     QWidget *pWidgetRight = new QWidget(this);
     pWidgetRight->setLayout(RighetLayout);

    //开辟一个界面,将右边整体放入大的界面中
     QWidget *pWidgetBottom = new QWidget(this);
     pWidgetBottom->setLayout(ButtomLayout);

    //左右两个大的界面平行
     QHBoxLayout *TopLRLayout=new QHBoxLayout();
     TopLRLayout->addWidget(pWidgetLeft);
     TopLRLayout->addWidget(pWidgetRight);

     QVBoxLayout* BottomLayout=new QVBoxLayout();
     BottomLayout->addLayout(TopLRLayout);
     BottomLayout->addWidget(pWidgetBottom);


    this->setLayout(BottomLayout);

    //字体样式
    QString strLableStyle4 = "color: rgb(0, 0, 0);"    //黑色字体
                                  "font-family: Microsoft YaHei;"
                                  "font-size: 16px;"
                                  "font-weight: bold;";


    label_UserName->setStyleSheet(strLableStyle4);
    label_Name->setStyleSheet(strLableStyle4);
    label_Sex->setStyleSheet(strLableStyle4);
    label_Age->setStyleSheet(strLableStyle4);
    label_Department->setStyleSheet(strLableStyle4);
    label_Other->setStyleSheet(strLableStyle4);

    label_head->setStyleSheet(strLableStyle4);;
    label_headIcon->setStyleSheet(strLableStyle4);
    btn_updateHead->setStyleSheet(strLableStyle4);
    IntroductionLabel->setStyleSheet(strLableStyle4);

    btn_Ok->setStyleSheet(strLableStyle4);
    btn_Cancel->setStyleSheet(strLableStyle4);
}

 (2)显示用户的联系方式

contact.h

#ifndef CONTACT_H
#define CONTACT_H
#include <QMainWindow>
#include <QWidget>
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QComboBox>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QCheckBox>
class Contact : public QWidget
{
    Q_OBJECT
public:
    explicit Contact(QWidget *parent = nullptr);
    //Contact(QWidget *parent=0);
signals:

private:
     QLabel *labEmail;
     QLineEdit *lineEmail;

    QLabel *labAddr;
    QLineEdit *lineAddr;

    QLabel *labCode;
    QLineEdit *lineCode;

    QLabel *labMoviTel;
    QLineEdit *lineMoviTel;
    QCheckBox *chbokMoviTel;

    QLabel *labProTel;
    QLineEdit *lineProTel;


};

#endif // CONTACT_H

 contact.cpp

#include "contact.h"

Contact::Contact(QWidget *parent) : QWidget(parent)
{

   labEmail=new QLabel(this);
   lineEmail=new QLineEdit;

   labAddr=new QLabel(this);
   lineAddr=new QLineEdit;

   labCode=new QLabel(this);
   lineCode=new QLineEdit;

   labMoviTel=new QLabel(this);
   lineMoviTel=new QLineEdit;
   chbokMoviTel=new QCheckBox;

   labProTel=new QLabel(this);
   lineProTel=new QLineEdit;

   labEmail->setFixedSize(80,30);
   lineEmail->setFixedSize(80,30);
   labAddr->setFixedSize(80,30);
   lineAddr->setFixedSize(80,30);
   labCode->setFixedSize(80,30);
   lineCode->setFixedSize(80,30);
   labMoviTel->setFixedSize(80,30);
   lineMoviTel->setFixedSize(80,30);
   chbokMoviTel->setFixedSize(80,30);

   labProTel->setFixedSize(80,30);
   lineProTel->setFixedSize(80,30);

   labEmail->setText(QStringLiteral("电子邮件:"));
   labAddr->setText(QStringLiteral("联系地址:"));
   labCode->setText(QStringLiteral("邮政编码:"));
   labMoviTel->setText(QStringLiteral("移动电话:"));
   chbokMoviTel->setText(QStringLiteral("接收留言:"));
   labProTel->setText(QStringLiteral("办公电话:"));

   QGridLayout *mainLayout=new QGridLayout(this);
   mainLayout->setMargin(15);
   mainLayout->setSpacing(10);
   mainLayout->addWidget(labEmail,0,0);
   mainLayout->addWidget(lineEmail,0,1);

   mainLayout->addWidget(labAddr,1,0);
   mainLayout->addWidget(lineAddr,1,1);

   mainLayout->addWidget(labCode,2,0);
   mainLayout->addWidget(lineCode,2,1);

   mainLayout->addWidget(labMoviTel,3,0);
   mainLayout->addWidget(lineMoviTel,3,1);
   mainLayout->addWidget(chbokMoviTel,3,2);

   mainLayout->addWidget(labProTel,4,0);
   mainLayout->addWidget(lineProTel,4,1);
   mainLayout->setSizeConstraint(QLayout::SetFixedSize);

this->setLayout(mainLayout);
}

(3)显示用户的详细资料

 detail.h

#ifndef DETAIL_H
#define DETAIL_H

#include <QWidget>
#include <QMainWindow>
#include <QWidget>
#include <QWidget>
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QComboBox>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QCheckBox>
class Detail : public QWidget
{
    Q_OBJECT
public:
    explicit Detail(QWidget *parent = nullptr);
    //Detail (QWidget *parent=0);

signals:

private:
    QLabel *labNational;
    QComboBox *comboxNational;

    QLabel *labProvince;
    QComboBox *comboxProvince;

    QLabel *labCity;
    QLineEdit *lineCity;

    QLabel *labIntruction;
    QTextEdit *textIntruction;



};

#endif // DETAIL_H

detail.cpp

#include "detail.h"

Detail::Detail(QWidget *parent) : QWidget(parent)
{

    labNational =new QLabel(this);
    comboxNational=new QComboBox(this);

    labProvince=new QLabel(this);
    comboxProvince=new QComboBox(this);;

    labCity=new QLabel(this);;
    lineCity=new QLineEdit(this);

    labIntruction=new QLabel(this);
    textIntruction=new QTextEdit(this);


    labNational->setFixedSize(70,30);
    comboxNational->setFixedSize(500,30);
    labProvince->setFixedSize(70,30);
    comboxProvince->setFixedSize(500,30);
    labCity->setFixedSize(70,30);
    lineCity->setFixedSize(500,30);
    labIntruction->setFixedSize(70,30);
    textIntruction->setFixedSize(500,400);


    labNational->setText(QStringLiteral("国家/地址:"));
    comboxNational->insertItem(0,QStringLiteral("中国"));
    comboxNational->insertItem(1,QStringLiteral("美国"));
    comboxNational->insertItem(2,QStringLiteral("英国"));

    labProvince->setText(QStringLiteral("省份:"));
    comboxProvince->insertItem(0,QStringLiteral("江苏省"));
    comboxProvince->insertItem(1,QStringLiteral("山东省"));
    comboxProvince->insertItem(2,QStringLiteral("浙江省"));
    labCity->setText(QStringLiteral("城市:"));
    labIntruction->setText(QStringLiteral("个人说明:"));

    QGridLayout *mainLayout=new QGridLayout(this);
    mainLayout->setMargin(15);
    mainLayout->setSpacing(10);
    mainLayout->addWidget(labNational,0,0);
    mainLayout->addWidget(comboxNational,0,1);

    mainLayout->addWidget(labProvince,1,0);
    mainLayout->addWidget(comboxProvince,1,1);

    mainLayout->addWidget(labCity,2,0);
    mainLayout->addWidget(lineCity,2,1);

    mainLayout->addWidget(labIntruction,3,0);
    mainLayout->addWidget(textIntruction,3,1);
this->setLayout(mainLayout);

}

 最外层是一个分割窗体QSplitter,分割窗体的左侧是一个QListWidget,右侧是一个QVBoxLayout布局,此布局包括一个堆栈窗体QStackWidget和一个按钮布局。堆栈窗体QStackWidget中包含三个窗体,每个窗体采用基本的布局方式进行布局管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值