创建项目选择QDialog,不要选QMainWindow
#ifndef DIALOGSTACK_H
#define DIALOGSTACK_H
#include <QDialog>
#include <QListWidget>//列表框
#include <QStackedWidget>//堆栈窗体
#include <QLabel>
QT_BEGIN_NAMESPACE
namespace Ui {
class DialogStack;
}
QT_END_NAMESPACE
class DialogStack : public QDialog
{
Q_OBJECT
public:
DialogStack(QWidget *parent = nullptr);
~DialogStack();
void InitForm();
private:
Ui::DialogStack *ui;
QListWidget *_lw;
QStackedWidget *_sw;
QLabel *_lb1;
QLabel *_lb2;
QLabel *_lb3;
QLabel *_lb4;
QLabel *_lb5;
};
#endif // DIALOGSTACK_H
#include "dialogstack.h"
#include "ui_dialogstack.h"
#include <QVBoxLayout>
DialogStack::DialogStack(QWidget *parent)
: QDialog(parent)
, ui(new Ui::DialogStack)
{
ui->setupUi(this);
InitForm();
}
DialogStack::~DialogStack()
{
delete ui;
}
void DialogStack::InitForm()
{
setWindowTitle("堆栈窗体demo");
//初始化控件
_lw = new QListWidget(this);
//QListWidget中插入选择项
_lw->insertItem(0,"主页");
_lw->insertItem(1,"音乐");
_lw->insertItem(2,"视频");
_lw->insertItem(3,"旅游");
_lw->insertItem(4,"故事");
//初始化标签控件
_lb1 = new QLabel("主页",this);
_lb2 = new QLabel("音乐",this);
_lb3 = new QLabel("视频",this);
_lb4 = new QLabel("旅游",this);
_lb5 = new QLabel("故事",this);
//创建堆叠窗体
_sw = new QStackedWidget(this);//父对象为主窗体
//_sw->setStyleSheet("background:red");
//将五个label加入_sw中
_sw->addWidget(_lb1);
_sw->addWidget(_lb2);
_sw->addWidget(_lb3);
_sw->addWidget(_lb4);
_sw->addWidget(_lb5);
//对主窗口布局
QHBoxLayout *hl = new QHBoxLayout();
hl->setMargin(10);//设置边距
hl->setSpacing(10);//设置控件间距
//布局中加入窗体
hl->addWidget(_lw);
hl->addWidget(_sw,0,Qt::AlignHCenter);
hl->setStretchFactor(_lw,1);//设置控件尺寸占比
hl->setStretchFactor(_sw,3);//
setLayout(hl);
connect(_lw,SIGNAL(currentRowChanged(int)),_sw,SLOT(setCurrentIndex(int)));
}