在stackdlg.h中添加:
class StackDlg : public QDialog
{
Q_OBJECT
public:
StackDlg(QWidget *parent = nullptr);
~StackDlg();
private:
QListWidget *list;
QStackedWidget *stack;
QLabel *label1;
QLabel *label2;
QLabel *label3;//私有成员
};
在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"));
list->insertItem(1,tr("Window2"));
list->insertItem(2,tr("Window3"));
//创建的三个标签控件对象,作为三层窗口
label1=new QLabel(tr("WindowTest1"));
label2=new QLabel(tr("WindowTest2"));
label3=new QLabel(tr("WindowTest3"));
stack =new QStackedWidget(this);//新建一个堆栈窗体对象
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
QHBoxLayout *mainlayout;
mainlayout=new QHBoxLayout(this);//
mainlayout->setMargin(5);
mainlayout->setSpacing(5);
mainlayout->addWidget(list);
mainlayout->addWidget(stack,Qt::AlignHCenter);
mainlayout->setStretchFactor(list,1);
mainlayout->setStretchFactor(stack,3);//这里表示list和stack两者之间的比例,以上的例子是1:3
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
}
StackDlg::~StackDlg()
{
}
两大函数:
mainlayout->setStretchFactor(list,1);//第一个是指向控件,第二个>0为可伸缩控件,这里表示list和stack两者之间的比例,以上的例子是1:3
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));//实现按选择选择窗体
效果展示: