QT_QT布局常用类QStackedWidget与QLayout类
文章目录
- QT_QT布局常用类QStackedWidget与QLayout类
- QLayout类(基本布局)
- 继承体系
- 布局案例
- QStackenWidget类(堆栈窗体)
- 继承体系
- 示例
QT_QT布局常用类QStackedWidget与QLayout类
QLayout类(基本布局)
继承体系
QLayout 是所有布局管理器的基类,它继承自 QObject(而非 QWidget)。整体继承关系如下:
QObject └── QLayout// 所有布局管理器的基类├── QBoxLayout// 线性布局(抽象基类)│ ├── QHBoxLayout// 水平排列│ └── QVBoxLayout// 垂直排列├── QGridLayout// 网格布局(二维)├── QFormLayout// 表单布局(标签 + 输入框)└── QStackedLayout// 堆叠布局(同一区域切换控件)布局案例
#include"dialog.h"Dialog::Dialog(QWidget*parent):QDialog(parent){setWindowTitle("员工信息");// 左边控件UserNumber=newQLabel("员工编号:");UserNumberEdit=newQLineEdit;UserName=newQLabel("员工姓名:");UserNameEdit=newQLineEdit;//(this)UserSex=newQLabel("员工性别");UserSexCombox=newQComboBox;UserSexCombox->addItem("男");UserSexCombox->addItem("女");UserDepart=newQLabel("所在部门:");UserDepartEdit=newQTextEdit;UserAge=newQLabel("员工年龄");UserAgeEdit=newQLineEdit;// 右边控件topRightLayout=newQHBoxLayout();topRightLayout->setSpacing(25);MySelfInfo=newQLabel("个人简历");MyselfInfoTextEdit=newQTextEdit;rightlayout=newQVBoxLayout();rightlayout->addLayout(topRightLayout);rightlayout->addWidget(MySelfInfo);rightlayout->addWidget(MyselfInfoTextEdit);// 右边下部分// QPushButton *okBtn,*cancelBtn;// QHBoxLayout *buttomLayout;okBtn=newQPushButton("保存");cancelBtn=newQPushButton("退出");buttomLayout=newQHBoxLayout();buttomLayout->addStretch();buttomLayout->addWidget(okBtn);buttomLayout->addWidget(cancelBtn);//网格布局lLayout=newQGridLayout();lLayout->addWidget(UserNumber,0,0);lLayout->addWidget(UserNumberEdit,0,1);lLayout->addWidget(UserName,1,0);lLayout->addWidget(UserNameEdit,1,1);lLayout->addWidget(UserSex,2,0);lLayout->addWidget(UserSexCombox,2,1);lLayout->addWidget(UserDepart,3,0);lLayout->addWidget(UserDepartEdit,3,1);lLayout->addWidget(UserAge,4,0);lLayout->addWidget(UserAgeEdit,4,1);lLayout->setColumnStretch(0,1);lLayout->setColumnStretch(1,3);QGridLayout*mlayout=newQGridLayout(this);mlayout->setMargin(20);mlayout->setSpacing(10);mlayout->addLayout(lLayout,0,0);mlayout->addLayout(rightlayout,0,1);mlayout->addLayout(buttomLayout,1,0,1,2);mlayout->setSizeConstraint(QLayout::SetFixedSize);}Dialog::~Dialog(){}QStackenWidget类(堆栈窗体)
QStackedWidget 是 Qt 中用于实现多页面切换的容器控件。它在同一区域放置多个子控件(页面),但同一时刻只显示其中一个,常用于实现选项卡、向导、设置页面等场景。
继承体系
QObject+QWidget └── QFrame └── QStackedWidget └── 内部使用 QStackedLayout 实现QStackedWidget 本质上是对 QStackedLayout 的封装,提供了更便捷的 Widget 级操作接口。
示例
#include"stackeddlg.h"#include<QHBoxLayout>stackedDlg::stackedDlg(QWidget*parent):QDialog(parent){setWindowTitle("堆栈窗体测试");qlist=newQListWidget(this);qlist->insertItem(0,"Linux1");qlist->insertItem(1,"Linux2");qlist->insertItem(2,"Linux3");qlist->insertItem(3,"Linux4");qlist->insertItem(4,"Linux5");lab1=newQLabel("linux1 QT");lab2=newQLabel("linux2 QT");lab3=newQLabel("linux3 QT");lab4=newQLabel("linux4 QT");lab5=newQLabel("linux5 QT");statcks=newQStackedWidget(this);statcks->addWidget(lab1);statcks->addWidget(lab2);statcks->addWidget(lab3);statcks->addWidget(lab4);statcks->addWidget(lab5);QHBoxLayout*mlayout=newQHBoxLayout(this);mlayout->setMargin(10);mlayout->setSpacing(20);mlayout->addWidget(qlist);mlayout->addWidget(statcks,0,Qt::AlignCenter);mlayout->setStretchFactor(qlist,1);mlayout->setStretchFactor(statcks,2);// 连接信号与槽connect(qlist,&QListWidget::currentRowChanged,statcks,&QStackedWidget::setCurrentIndex);}stackedDlg::~stackedDlg(){}