您的位置:首页 > 其它

(十一)布局管理器综合实例

2017-02-06 21:37 288 查看
开发一个向导用户界面:

1、在同一界面上展现不同的向导页

2、通过上/下一步按钮切换页面

3、不同页面上的元素组件和组件排布都不相同

4、页面中的组件通过布局管理器进行排布

 

 

界面设计:

通过嵌套管理布局

 


通栈式布局管理器管理不同向导页



 

通过子组件生产不同页

 


代码:

#include "Widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QFormLayout>
#include <QDebug>

Widget::Widget(QWidget *parent) :QWidget(parent)
{
initControl();
}

void Widget::initControl()
{
QVBoxLayout* vLayout = new QVBoxLayout();                          //构建了一个垂直布局管理器
QHBoxLayout* hLayout = new QHBoxLayout();                         //构建了一个水平布局管理器

preBtn.setText("Pre Page");
preBtn.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); //指定size策略为水平拉伸,垂直固定位
preBtn.setMinimumSize(160, 30);                                                //设置最小尺寸

nextBtn.setText("Next Page");
nextBtn.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
nextBtn.setMinimumSize(160, 30);

connect(&preBtn, SIGNAL(clicked()), this, SLOT(onPreBtnClicked()));
connect(&nextBtn, SIGNAL(clicked()), this,SLOT(onNextBtnClicked()));

hLayout->addWidget(&preBtn);                        //将组件加入水平布局管理器
hLayout->addWidget(&nextBtn);

sLayout.addWidget(get1stPage());          //将组件加入栈布局管理器
sLayout.addWidget(get2ndPage());
sLayout.addWidget(get3rdPage());

vLayout->addLayout(&sLayout);              //将栈布局管理器加入到垂直布局管理器当中
vLayout->addLayout(hLayout);                  //将水平布局管理器加入到垂直布局管理器当中

setLayout(vLayout);                                                        //使用垂直布局管理器
}

QWidget* Widget::get1stPage()
{
QWidget* ret = new QWidget();                        //创建一个QWidget组件作为栈布局管理器的容器,栈布局管理器中的组件将会填满QWidget
QGridLayout* layout = new QGridLayout();    //创建一个表格布局管理器对象

fLbl1.setText("This");
fLbl2.setText("is");
fLbl3.setText("1st");
fLbl4.setText("page");

layout->addWidget(&fLbl1, 0, 0);             //将组件加入表格布局管理器
layout->addWidget(&fLbl2, 0, 1);             //设置布局管理器后,组件的父组件将发生变化,这里fLbl1的父组件会变成QWidget对象
layout->addWidget(&fLbl3, 1, 0);
layout->addWidget(&fLbl4, 1, 1);

ret->setLayout(layout);                                        //在将要返回的widget组件上使用表格布局管理器

return ret;
}

QWidget* Widget::get2ndPage()
{
QWidget* ret = new QWidget();
QFormLayout* layout = new QFormLayout();

sLineEdit.setText("This is 2rd page");

layout->addRow("Hint:", &sLineEdit);

ret->setLayout(layout);

return ret;
}

QWidget* Widget::get3rdPage()
{
QWidget* ret = new QWidget();
QVBoxLayout* layout = new QVBoxLayout();

tPushBtn1.setText("This is");
tPushBtn2.setText("3rd page");

layout->addWidget(&tPushBtn1);
layout->addWidget(&tPushBtn2);

ret->setLayout(layout);

return ret;
}

void Widget::onPreBtnClicked()
{
int index = ((sLayout.currentIndex() - 1) + 3) % 3;
sLayout.setCurrentIndex(index);
}

void Widget::onNextBtnClicked()
{
int index = (sLayout.currentIndex() + 1) % 3;

sLayout.setCurrentIndex(index);
}

Widget::~Widget()
{

}


 

 

 

 

 

 声明:

此文根据 狄泰学院唐老师的《QT实验分析教程》创作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: