堆栈窗体StackedWidget多与列表框QListWidget和下拉列表框QComboBox配合使用;
stackeddialog.h
#ifndef STACKEDDIALOG_H
#define STACKEDDIALOG_H
#include <QDialog>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
class StackedDialog : public QDialog
{
Q_OBJECT
public:
StackedDialog(QWidget *parent = nullptr);
~StackedDialog();
private:
QListWidget *list;
QStackedWidget *stack;
QLabel *label1;
QLabel *label2;
QLabel *label3;
};
#endif // STACKEDDIALOG_H
stackeddialog.cpp
#include "stackeddialog.h"
#include <QHBoxLayout>
StackedDialog::StackedDialog(QWidget *parent)
: QDialog(parent)
{
setWindowTitle("StackedWidget");
list = new QListWidget(this); //新建一个QListWidget控件对象
list->insertItem(0, "Window1"); //在新建的QListWidget控件中插入3个条目作为选择项
list->insertItem(1, "Window2");
list->insertItem(2, "Window3");
label1 = new QLabel("Window Demo1"); //创建3个QLabel标签控件对象,作为堆栈窗口需要显示的三层窗体
label2 = new QLabel("Window Demo2");
label3 = new QLabel("Window Demo3");
stack = new QStackedWidget(this); //创建一个QStackedWidget堆栈窗体对象
stack->addWidget(label1); //将创建的3个QLabel标签控件依次插入堆栈窗体中
stack->addWidget(label2);
stack->addWidget(label3);
QHBoxLayout *mainLayout = new QHBoxLayout(this); //对整个对话框进行布局
mainLayout->setMargin(5); //设定对话框(或窗体)的边距为5
mainLayout->setSpacing(5); //设定各个控件之间的间距为5
mainLayout->addWidget(list);
mainLayout->addWidget(stack, 0, Qt::AlignHCenter);
mainLayout->setStretchFactor(list, 1); //设定可以伸缩控件,第1个参数用于指定设置的控件(序号从0起编号),
//第2个参数值大于0则表示此控件为可以伸缩控件
mainLayout->setStretchFactor(stack, 3);
connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));
}
StackedDialog::~StackedDialog()
{
}
main.cpp
#include "stackeddialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StackedDialog w;
w.show();
return a.exec();
}