QT界面基本操作
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();
}
程序截图