目录
QLayout类
QStackedWidget类
QSplitter类
QDockWidget类
一、QLayout类(基本布局)
Qt提供QHBoxLayout类、QVBoxLayout类、QGridLayout类等基本布局管理。
实战应用:
setWindowTitle("员工信息");
//左边控件
UserNumber=new QLabel("员工编号");
UserNumberEdit=new QLineEdit;
UserName=new QLabel("员工姓名:");
UserNameEdit=new QLineEdit;
UserSex=new QLabel("员工性别:");
UserSexCombobox=new QComboBox;
UserSexCombobox->addItem("男");
UserSexCombobox->addItem("女");
UserDepart=new QLabel("所在部门:");
UserDepartEdit=new QTextEdit;
UserAge=new QLabel("年龄:");
UserAgeEdit=new QLineEdit;
//右边控件
RTitle=new QLabel("个人简介");
infoEdit=new QTextEdit;
Yesbutton=new QPushButton("确认");
CloseButton=new QPushButton("关闭");
//网格布局
lLayout=new QGridLayout();
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(UserSexCombobox,2,1);
lLayout->addWidget(UserDepart,3,0);
lLayout->addWidget(UserDepartEdit,3,1);
lLayout->addWidget(UserAge,4,0);
lLayout->addWidget(UserAgeEdit,4,1);
buttonLayout = new QHBoxLayout;
buttonLayout->addStretch();
buttonLayout->addWidget(Yesbutton);
buttonLayout->addWidget(CloseButton);
rLayout=new QGridLayout();
rLayout->addWidget(RTitle,0,0);
rLayout->addWidget(infoEdit,1,0);
rLayout->addLayout(buttonLayout,2,0);
QGridLayout *mlayout=new QGridLayout(this);
mlayout->addLayout(lLayout,0,0);
mlayout->addLayout(rLayout,0,1);
左侧和右侧分别采用网格布局,将部件安排布局显示在整体的一个大的网络布局中。其中右侧的button控件,采用水平布局,且使用addStretch动态调整分配控件间距。
演示效果:
界面优化:可以调整layout,将三个layout同时放在同一个大的layout中UI效果可能会更美观。
二、QStackedWidget类(堆栈窗体)
QStackedWidget控件相当于一个窗口一样,提供一个空间专门存放一些控件。
// 创建一个QStackedWidget实例
stackedWidget=new QStackedWidget;
// 创建几个页面窗口部件
page1=new QWidget;
page2=new QWidget;
page3=new QWidget;
// 在页面窗口部件中添加一些内容
label1=new QLabel("This is Page 1");
label2=new QLabel("This is Page 2");
label3=new QLabel("This is Page 3");
layout1=new QVBoxLayout(this);
layout1->addWidget(label1);
page1->setLayout(layout1);
qDebug()<<"page1";
layout2=new QVBoxLayout(this);
layout2->addWidget(label2);
page2->setLayout(layout2);
layout3=new QVBoxLayout(this);
layout3->addWidget(label3);
page3->setLayout(layout3);
// 将页面窗口部件添加到QStackedWidget中
stackedWidget->addWidget(page1);
stackedWidget->addWidget(page2);
stackedWidget->addWidget(page3);
// 创建按钮来切换页面
button1=new QPushButton("Page 1",this);
button2=new QPushButton("Page 2",this);
button3=new QPushButton("Page 3",this);
// 连接按钮的点击事件到对应的页面
connect(button1, SIGNAL(clicked()),this, SLOT(button1clicked()));
connect(button2, SIGNAL(clicked()),this,SLOT(button2clicked()));
connect(button3,SIGNAL(clicked()),this, SLOT(button3clicked()));
// 创建一个布局,并将按钮和QStackedWidget添加到其中
QHBoxLayout *mlayout=new QHBoxLayout(this);
mlayout->addWidget(button1);
mlayout->addWidget(button2);
mlayout->addWidget(button3);
mlayout->addWidget(stackedWidget);
}
Dialog::~Dialog()
{
}
void Dialog::button1clicked(){
stackedWidget->setCurrentIndex(0);
qDebug()<<"button1";
}
void Dialog::button2clicked(){
stackedWidget->setCurrentIndex(1);
qDebug()<<"button2";
}
void Dialog::button3clicked(){
stackedWidget->setCurrentIndex(2);
qDebug()<<"button3";
}
运行效果:单击按钮,会跳转到相应界面。
三、QSplitter类(窗口分割)
实例:
//1:拆分窗口
QSplitter *spmainwindow = new QSplitter(Qt::Horizontal,0);
QTextEdit *texteditmain = new QTextEdit("",spmainwindow);
//2:
QSplitter *spRight = new QSplitter(Qt::Vertical,spmainwindow);
QTextEdit *textediteup = new QTextEdit("中间第1部分窗口",spRight);
QTextEdit *texteditmiddle = new QTextEdit("中间第2部分窗口",spRight);
QTextEdit *texteditedown = new QTextEdit("中间第3部分窗口",spRight);
QTextEdit *texteditefour = new QTextEdit("中间第4部分窗口",spRight);
//3:
QSplitter *spTriRight = new QSplitter(Qt::Horizontal,spmainwindow);
QTextEdit *addtextedite = new QTextEdit("第三部分窗口",spTriRight);
spmainwindow->setWindowTitle("Splitter类拆分窗口test");
spmainwindow->show();
运行效果:
四、QDockWidget类(停靠窗口)
小实践:
setWindowTitle("QDockWidget类停靠窗口测试");
QTextEdit *maintextedit = new QTextEdit(this);
maintextedit->setAlignment(Qt::AlignCenter);
setCentralWidget(maintextedit);
//创建停靠窗口1
QDockWidget *dockWiget1=new QDockWidget("停靠窗口1",this);
dockWiget1->setFeatures(QDockWidget::DockWidgetMovable); //可移动特性的设置
dockWiget1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
QTextEdit *textedit1=new QTextEdit();
dockWiget1->setWidget(textedit1);
addDockWidget(Qt::LeftDockWidgetArea,dockWiget1);
//创建停靠窗口2
QDockWidget *dockWiget2=new QDockWidget("停靠窗口2",this);
dockWiget2->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetClosable| QDockWidget::DockWidgetFloatable);
//可移动特性 可关闭 浮动性
QTextEdit *textedit2=new QTextEdit();
dockWiget2->setWidget(textedit2);
addDockWidget(Qt::RightDockWidgetArea,dockWiget2);
运行效果: