QT界面基本操作(QListWidget、QStackedWidget、QSplitter)

content(堆栈窗体编写)

堆栈布局

//.h
#ifndef CONTENT_H
#define CONTENT_H

#include <QFrame>
#include <QDialog>
#include <QStackedWidget>
#include <QPushButton>
#include "baseinfo.h"
#include "contact.h"
#include "detail.h"

class content : public QFrame
{
    Q_OBJECT

public:
    content(QWidget *parent = 0);
    ~content();
    QStackedWidget *stack;//堆栈窗体
    QPushButton *AmendBtn;
    QPushButton *CloseBtn;
    BaseInfo *baseinfo;//基本信息界面
    Contact *contact;//联系方式界面
    Detail *detail;//详细资料

};

#endif // CONTENT_H

//.cpp
#include "content.h"
#include <QHBoxLayout>

content::content(QWidget *parent) : QFrame(parent)
{
    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);
}

content::~content()
{

}

BASEINFO(基本信息界面编写)

//.h
#ifndef BASEINFO_H
#define BASEINFO_H

#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QTextEdit>
#include <QGridLayout>
#include <QPushButton>

class BaseInfo : public QWidget
{
    Q_OBJECT
public:
    explicit BaseInfo(QWidget *parent = nullptr);

signals:

public slots:
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;

};

#endif // BASEINFO_H
//.cpp
#include "baseinfo.h"
#include <QPixmap>

BaseInfo::BaseInfo(QWidget *parent) : QWidget(parent)
{
    UserNamelabel=new QLabel("用户名:");
    UserNameLineEdit=new QLineEdit;
    Namelabel =new QLabel("姓名:");
    NameLineEdit=new QLineEdit;
    Sexlabel =new QLabel("性别:");
    SexComboBox=new QComboBox;
    SexComboBox->addItem("女");
    SexComboBox->addItem("男");
    Departmentlabel =new QLabel("部门:");
    DepartmentTextEdit =new QTextEdit;
    Agelabel=new QLabel("年龄:");
    AgeLineEdit=new QLineEdit;
    Otherlabel=new QLabel("备注:");
    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("头像");
    HeadIconLabel=new QLabel;
    //插入图片
    QPixmap icon("312.png");
    HeadIconLabel->setPixmap(icon);
    HeadIconLabel->resize(icon.width(),icon.height());
    
    UpdateHeadBtn=new QPushButton("更改");
    TopRightLayout=new QHBoxLayout;
    TopRightLayout->setSpacing(20);
    TopRightLayout->addWidget(HeadLabel);
    TopRightLayout->addWidget(HeadIconLabel);
    TopRightLayout->addWidget(UpdateHeadBtn);
    IntroductionLabel=new QLabel("个人说明:");
    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(联系方式界面编写)

//.h
#ifndef CONTACT_H
#define CONTACT_H

#include <QWidget>
#include <QLabel>
#include <QGridLayout>
#include <QLineEdit>
#include <QCheckBox>
class Contact : public QWidget
{
    Q_OBJECT
public:
    explicit Contact(QWidget *parent = nullptr);

signals:

public slots:
private:
    QLabel *EmailLabel;
    QLineEdit *EmailLineEdit;
    QLabel *AddrLabel;
    QLineEdit *AddrLineEdit;
    QLabel *CodeLabel;
    QLineEdit *CodeLineEdit;
    QLabel *MoviTelLabel;
    QLineEdit *MoviTelLineEdit;
    QCheckBox *MoviTelCheckBox;
    QLabel *ProTelLabel;
    QLineEdit *ProTelLineEdit;
    QGridLayout *mainLayout;

};

#endif // CONTACT_H

//.cpp
#include "contact.h"

Contact::Contact(QWidget *parent) : QWidget(parent)
{
    EmailLabel=new QLabel("电子邮件: ");
    EmailLineEdit=new QLineEdit;
    AddrLabel=new QLabel("联系地址: ");
    AddrLineEdit=new QLineEdit;
    CodeLabel=new QLabel("邮编地址:");
    CodeLineEdit=new QLineEdit;
    MoviTelLabel=new QLabel("移动电话:");
    MoviTelLineEdit =new QLineEdit;
    //QCheckBox
    MoviTelCheckBox =new QCheckBox("接受留言");
    ProTelLabel =new QLabel("办公电话:");
    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(MoviTelCheckBox,3,2);
    mainLayout->addWidget(ProTelLabel,4,0);
    mainLayout->addWidget(ProTelLineEdit,4,1);
    mainLayout->setSizeConstraint(QLayout::SetFixedSize);
}

detail(详细资料界面编写)

//.h
#ifndef DETAIL_H
#define DETAIL_H

#include <QWidget>
#include <QLabel>
#include <QComboBox>
#include <QLineEdit>
#include <QTextEdit>
#include <QGridLayout>

class Detail : public QWidget
{
    Q_OBJECT
public:
    explicit Detail(QWidget *parent = nullptr);

signals:

public slots:
private:
    QLabel *NationalLabel;
    QComboBox *NationalComboBox;
    QLabel *ProvinceLabel;
    QComboBox *ProvinceComboBox;
    QLabel *CityLabel;
    QLineEdit *CityLineEdit;
    QLabel *IntroctductLabel;
    QTextEdit *IntroctductTextEdit;
    QGridLayout *mainLayout;
};

#endif // DETAIL_H
//.cpp
#include "detail.h"

Detail::Detail(QWidget *parent) : QWidget(parent)
{
    NationalLabel=new QLabel("国家、地址:");
    NationalComboBox=new QComboBox;
    NationalComboBox->insertItem(0,tr("中国"));
    NationalComboBox->insertItem(1,tr("英国"));
    NationalComboBox->insertItem(2,tr("美国"));
    ProvinceLabel= new QLabel("省份:");
    ProvinceComboBox= new QComboBox;
    ProvinceComboBox->insertItem(0,"江苏省");
    ProvinceComboBox->insertItem(1,"山东省");
    ProvinceComboBox->insertItem(2,"浙江省");
    CityLabel=new QLabel("城市:");
    CityLineEdit=new QLineEdit;
    IntroctductLabel= new QLabel("个人说明:");
    IntroctductTextEdit=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(IntroctductLabel,3,0);
    mainLayout->addWidget(IntroctductTextEdit,3,1);
}

main函数编写(QSplitter分割窗口、QListWidget与QStackWidget连接)

/.cpp
#include "content.h"
#include <QApplication>
#include <QSplitter>
#include <QTextCodec>
#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);//设置水平分割,0为主窗口
    splitterMain->setOpaqueResize(true);//设置分割线拖动时是否显现;
    QListWidget *list=new QListWidget(splitterMain);//将list插入到分割窗口
    //插入list项
    list->insertItem(0,"基本信息");
    list->insertItem(1,"联系方式");
    list->insertItem(2,"详细资料");
    content* content1=new content(splitterMain);//将content(stack堆栈窗口)插入到分割窗口
    QObject::connect(list,SIGNAL(currentRowChanged(int)),content1->stack,SLOT(setCurrentIndex(int)));//信号槽函数连接list与stack
    splitterMain->setWindowTitle("修改用户资料");//设置标题
    splitterMain->setMinimumSize(splitterMain->minimumSize());//设置主窗口最小size
    splitterMain->setMaximumSize(splitterMain->maximumSize());//设置主窗口最大size
    splitterMain->show();
    //content w;
    //w.show();

    return a.exec();
}

程序截图

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

发布了31 篇原创文章 · 获赞 3 · 访问量 300

猜你喜欢

转载自blog.csdn.net/weixin_44011306/article/details/105229761