您的位置:首页 > 编程语言 > Qt开发

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

2014-12-21 20:05 537 查看
老规矩,给个目标实现以下:





代码展示,

首先创建一个项目,不要界面,选择基类是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()
{

}


执行结果:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: