首页 > 代码库 > 【Qt5开发及实例】5、布局管理之堆栈窗体QStackedWidget类

【Qt5开发及实例】5、布局管理之堆栈窗体QStackedWidget类

老规矩,给个目标实现以下:


技术分享技术分享


代码展示,

首先创建一个项目,不要界面,选择基类是QDialog这个,后面名字的话随便改改

我的类名是:StackDlg

所以之后,只要在stackdlg.h里面加入两个头文件,等会要用的

#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
#include <QHBoxLayout>

全部代码

#ifndef STACKDLG_H
#define STACKDLG_H

#include <QDialog>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>

class StackDlg : public QDialog
{
  Q_OBJECT

public:
  StackDlg(QWidget *parent = 0);
  ~StackDlg();
private:
  QListWidget *list;  //列表框
  QStackedWidget *stack;  //堆栈窗体
  QLabel *label1;   //文本窗体
  QLabel *label2;
  QLabel *label3;


};

#endif // STACKDLG_H



然后在stackdlg.cpp里面是:


#include "stackdlg.h"
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
#include <QHBoxLayout>

StackDlg::StackDlg(QWidget *parent)
  : QDialog(parent) //继承过来的构造函数
{
  setWindowTitle(tr("StackedWidget"));    //设置窗体的名字
  list = new QListWidget(this);   //创建一个列表框
  //往这个列表框里面添加元素
  list->insertItem(0, tr("NO.1"));
  list->insertItem(1, tr("NO.2"));
  list->insertItem(2, tr("NO.3"));


  label1 = new QLabel(tr("测试1"));
  label2 = new QLabel(tr("测试2"));
  label3 = new QLabel(tr("测试3"));

  stack = new QStackedWidget(this); //为这个主窗体创建一个堆栈窗体
  stack->addWidget(label1); //添加一个文本进入窗体
  stack->addWidget(label2); //添加第二个
  stack->addWidget(label3); //添加第三个

  QHBoxLayout *mainLayout = new QHBoxLayout(this);  //设置一个布局
  mainLayout->setMargin(5); //设置这个对话框的边距
  mainLayout->setSpacing(5);  //设置各个控件之间的边距
  mainLayout->addWidget(list);  //把list里面的内容加到窗体里面
  mainLayout->addWidget(stack, 0, Qt::AlignHCenter);
  mainLayout->setStretchFactor(list, 3);  //设定为可伸缩的控件,第一个参数是用于指定设置的控件,第二个大于0表示这个控件可伸缩
  mainLayout->setStretchFactor(stack, 3);
  connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));


}

StackDlg::~StackDlg()
{

}


其余没变,怎么感觉很累呢???


然后修改一点点,我们了解一下那个QListWidget到底是个什么情况

#include "stackdlg.h"
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
#include <QHBoxLayout>

StackDlg::StackDlg(QWidget *parent)
  : QDialog(parent) //继承过来的构造函数
{
  setWindowTitle(tr("StackedWidget"));    //设置窗体的名字
  list = new QListWidget(this);   //创建一个列表框
  //往这个列表框里面添加元素
  list->insertItem(0, tr("NO.1"));
  list->insertItem(1, tr("NO.2"));
  list->insertItem(2, tr("NO.3"));
  list->insertItem(2, tr("222"));   //后加入的会覆盖前面的,这里和上面不一样,其余一样


  label1 = new QLabel(tr("测试1"));
  label2 = new QLabel(tr("测试2"));
  label3 = new QLabel(tr("测试3"));

  stack = new QStackedWidget(this); //为这个主窗体创建一个堆栈窗体
  stack->addWidget(label1); //添加一个文本进入窗体
  stack->addWidget(label2); //添加第二个
  stack->addWidget(label3); //添加第三个

  QHBoxLayout *mainLayout = new QHBoxLayout(this);  //设置一个布局
  mainLayout->setMargin(5); //设置这个对话框的边距
  mainLayout->setSpacing(5);  //设置各个控件之间的边距
  mainLayout->addWidget(list);  //把list里面的内容加到窗体里面
  mainLayout->addWidget(stack, 0, Qt::AlignHCenter);
  mainLayout->setStretchFactor(list, 3);  //设定为可伸缩的控件,第一个参数是用于指定设置的控件,第二个大于0表示这个控件可伸缩
  mainLayout->setStretchFactor(stack, 3);
  connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));


}

StackDlg::~StackDlg()
{

}

执行结果:

技术分享技术分享技术分享





【Qt5开发及实例】5、布局管理之堆栈窗体QStackedWidget类