堆栈窗体QStackedWidget类也是应用程序中经常用到的。在实际应用中,堆栈窗体多于列表框QListWidget及下拉列表框QComboBox配合使用。
一、实现效果
堆栈窗体QStackedWidget类的使用,当选择左侧列表框中不同的选项时,右侧显示所选的不同的窗体。在此使用列表框QListWidget,效果如下:
二、实现步骤
(1)新建Qt Widget Application,项目名称为:"StackedWidget",基类选择“QDialog”,基类命名为“StackDlg”,取消“创建界面”复选框的选中状态。
(2)打开“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 = nullptr);
~stackDlg();
private:
QListWidget *list;
QStackedWidget *stack;
QLabel *label1;
QLabel *label2;
QLabel *label3;
};
#endif // STACKDLG_H
(3)打开“StackDlg.cpp”文件:
#include "stackdlg.h"
#include "QHBoxLayout"
stackDlg::stackDlg(QWidget *parent)
: QDialog(parent)
{
//设置窗体固定大小(宽度,高度)
this->setFixedSize(600,600);
//设置窗口标题
setWindowTitle(tr("StackWidget"));
//设置一个Qlistwidget控件对象
list =new QListWidget();
//在新建的Qlistwidget控件中插入三条目录,作为选择项
list->insertItem(0,tr("Windows1"));
list->insertItem(1,tr("Windows2"));
list->insertItem(2,tr("Windows3"));
//创建三个Qlabel标签控件对象,作为堆栈窗口需要显示的三层窗体
label1 = new QLabel(tr("WindowTest1"));
label2 = new QLabel(tr("WindowTest2"));
label3 = new QLabel(tr("WindowTest3"));
//新建一个Qstackedwidget堆栈窗口对象
stack = new QStackedWidget(this);
//将创建的三个QLabel标签依次插入堆栈窗口中
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
//对整个对话框进行布局
QHBoxLayout *mainLayout = new QHBoxLayout(this);
//设定对话框(或窗口)的边距为5
mainLayout->setMargin(5);
//设定各个控件之间的间距为5
mainLayout->setSpacing(5);
mainLayout->addWidget(list);
mainLayout->addWidget(stack,0,Qt::AlignHCenter);
mainLayout->setStretchFactor(list,0); //a
mainLayout->setStretchFactor(stack,3); //b
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
}
stackDlg::~stackDlg()
{
}
其中:
(a)mainLayout->setStretchFactor(list,0) :设定可伸缩控件,第1个参数用于指定设置的控件(序号从0起编号),第2个参数的值大于0则表示此控件为可伸缩控件
(b)mainLayout->setStretchFactor(stack,3) :将QListWidget的currentRowChanged()信号与堆栈的窗体的setCurrentIndex()槽函数连接起来,实现按选择显示窗体。此处的堆栈窗体index按插入的顺序从0起依次排序,与QListWidget的条目排序相一致。