QT 布局示例

baseinfo.h

#ifndef BASEINFO_H
#define BASEINFO_H

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

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

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 *MoviTelCheckBook;
    QLabel *ProTelLabel;
    QLineEdit *ProTelLineEdit;
    QGridLayout *mainLayout;
};

#endif // CONTACT_H

content.h

#ifndef CONTENT_H
#define CONTENT_H

#include <QDialog>
#include <QFrame>
#include <QPushButton>
#include <QStackedWidget>

#include "baseinfo.h"
#include "contact.h"
#include "detail.h"

class Content : public QFrame
{
    
    
    Q_OBJECT

public:
    Content(QWidget *parent = nullptr);
    ~Content();
    QStackedWidget *stack;
    QPushButton *AmenBtn;
    QPushButton *CloseBtn;

    BaseInfo *baseInfo;
    Contact *contact;
    Detail  *detail;

};
#endif // CONTENT_H

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 *IntroductLabel;
    QTextEdit *IntroductTextEdit;
    QGridLayout *mainLayout;
};

#endif // DETAIL_H

baseinfo.cpp

#include "baseinfo.h"

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

    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(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);
    baseInfo = new BaseInfo();
    contact = new Contact();
    detail = new Detail();

    stack->addWidget(baseInfo);
    stack->addWidget(contact);
    stack->addWidget(detail);

    AmenBtn = new QPushButton("修改");
    CloseBtn = new QPushButton("关闭");
    QHBoxLayout *BtnLayout = new QHBoxLayout();
    BtnLayout->addStretch(1);
    BtnLayout->addWidget(AmenBtn);
    BtnLayout->addWidget(CloseBtn);

    QVBoxLayout *RightLayout = new QVBoxLayout(this);
    RightLayout->setMargin(10);
    RightLayout->setSpacing(6);
    RightLayout->addWidget(stack);
    RightLayout->addLayout(BtnLayout);

}

Content::~Content()
{
    
    
}


detail.cpp

#include "detail.h"


Detail::Detail(QWidget *parent) : QWidget(parent)
{
    
    
    NationalLabel = new QLabel("国家/地址: ");
    NationalComboBox = new QComboBox();
    NationalComboBox->insertItem(0, "中国");
    NationalComboBox->insertItem(1, "美国");
    NationalComboBox->insertItem(2, "英国");

    ProvinceLabel = new QLabel("省份: ");
    ProvinceComboBox = new QComboBox();
    ProvinceComboBox->insertItem(0, "河南省");
    ProvinceComboBox->insertItem(1, "海南省");
    ProvinceComboBox->insertItem(2, "河北省");

    CityLabel = new QLabel("城市: ");
    CityLineEdit = new QLineEdit();

    IntroductLabel = new QLabel("个人说明: ");
    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

#include "content.h"

#include <QApplication>
#include <QTextEdit>
#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(splitterMain);
    list->insertItem(0, "基本信息");
    list->insertItem(1, "联系方式");
    list->insertItem(2, "详细资料");

    Content *content = new Content(splitterMain);
    QObject::connect(list, SIGNAL(currentRowChanged(int)), content->stack, SLOT(setCurrentIndex(int)));
    splitterMain->setWindowTitle("修改用户资料");
    splitterMain->setMinimumSize(splitterMain->minimumSize());
    splitterMain->setMaximumSize(splitterMain->maximumSize());
    splitterMain->show();

    return a.exec();
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013420428/article/details/109682046