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

Qt5布局管理(三)——QStackedWidget堆栈窗口类

2016-04-05 23:39 656 查看

堆栈窗口类QStackedWidget

Code@github:https://github.com/LeeHDsniper/LearnQt/tree/master/CH303

实例效果



如上图,堆栈窗口左半部分是一个QListWidget对象,右半部分是分别是三个标签。通过点击左边不同的项目,可以使得右边的Lable进行切换。

具体的结构是这样:

首先这个大的窗口是一个QDialog的派生,这个大窗口包含三个子对象

一个QHBoxLayout布局对象,它将窗口分为左右两部分

一个QListWidget对象,包含三个Item

一个QStackedWidget对象,包含了三个标签对象

代码如下:

stackdlg.h,定义了各个元素

#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 *lable1;
QLabel *lable2;
QLabel *lable3;
};

#endif // STACKDLG_H


stackdlg.cpp 具体实现

#include "stackdlg.h"
#include <QHBoxLayout>
StackDlg::StackDlg(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(tr("StackedWidget"));
list=new QListWidget(this);        //新建一个QListWidget控件对象
list->insertItem(0,tr("Window1"));//在QListWidget中插入三个条目作为选择项
list->insertItem(1,tr("Window2"));
list->insertItem(2,tr("Window3"));
//创建三个QLable标签控件对象,作为堆栈窗口需要显示的三层窗体
lable1=new QLabel(tr("WindowTest1"));
lable2=new QLabel(tr("WindowTest2"));
lable3=new QLabel(tr("WindowTest3"));
stack=new QStackedWidget(this);//新建一个QStackedWidget堆栈窗体对象
//将三个QLable标签控件依次插入堆栈窗体中
stack->addWidget(lable1);
stack->addWidget(lable2);
stack->addWidget(lable3);
QHBoxLayout *mainlayout=new QHBoxLayout(this);
mainlayout->setMargin(5);
mainlayout->setSpacing(5);
mainlayout->addWidget(list);
mainlayout->addWidget(stack,0,Qt::AlignHCenter);
mainlayout->setStretchFactor(list,1);
mainlayout->setStretchFactor(stack,3);
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
}

StackDlg::~StackDlg()
{

}


重要代码

这个里面的重要代码有两个:

1.
mainlayout->setStretchFactor(list,1);


mainlayout->setStretchFactor(stack,3);


这个我在前面的文章中已经讲过:

/article/10010641.html,这里对list和stack的参数为1和3,区别就在于拉伸时的变化率的大小。

2.
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));


这个连接函数将QListWidget的信号currentRowChange(int)和QStackedWidget的槽setCurrentIndex(int)连接在一起,所以才导致了堆栈窗口的切换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: