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

开发一个向导用户界面:

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实验分析教程》创作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值