QStackedWidget

QStackedWidget可以將元件分成一層一層的堆疊,每一層元件有索引,可以指定索引來表示目前窗口該顯示哪一層的元件,這邊用QListWidget在視窗左邊呈現選項清單,視窗右邊使用QStackedWidget放置三層元件,使用者在左邊選取項目,此時右邊會顯示相對的元件。


widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
#include <QHBoxLayout>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
private:
    QHBoxLayout *mainLayout;
    QListWidget *listWidget;
    QStackedWidget *stackedWidget;
    QLabel *label1;
    QLabel *label2;
    QLabel *label3;
};

#endif 

widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    setWindowTitle(tr("StackedWidget"));
    listWidget = new QListWidget(this);
    listWidget->insertItem(0,tr("第一項"));
    listWidget->insertItem(1,tr("第二項"));
    listWidget->insertItem(2,tr("第三項"));

    label1 = new QLabel(tr("第一項的內容"));
    label2 = new QLabel(tr("第二項的內容"));
    label3 = new QLabel(tr("第三項的內容"));

    stackedWidget = new QStackedWidget(this);
    stackedWidget->addWidget(label1);
    stackedWidget->addWidget(label2);
    stackedWidget->addWidget(label3);

    QHBoxLayout *mainLayout =new QHBoxLayout(this);
    mainLayout->addWidget(listWidget);
    mainLayout->addWidget(stackedWidget,0,Qt::AlignHCenter);
    mainLayout->setStretchFactor(listWidget,1);   //伸縮時左右分別為1:4拉伸
    mainLayout->setStretchFactor(stackedWidget,4);
    connect(listWidget,SIGNAL(currentRowChanged(int)),stackedWidget,SLOT(setCurrentIndex(int)));
}

main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

QStackedWidget