QStackedLayout可以讓您將元件分成一層一層的堆疊,每一層元件有索引,可以指定索引來表示該顯示哪一層的元件,您也可以直接使用QStackedWidget,它繼承自QWidget,內建的版面配置是QStackedLayout。
下面的程式使用QListWidget在視窗左邊提供選項,在視窗右邊使用QStackedLayout放置三層元件,使用者在左邊選取右邊要顯示哪一層元件:
#include <QApplication>
#include <QStackedLayout>
#include <QListWidget>
#include <QIcon>
#include <QLabel>
#include <QPushButton>
#include <QTextEdit>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("QStackLayout");
window->resize(400, 300);
QHBoxLayout *hBoxLayout = new QHBoxLayout;
QListWidget *listWidget = new QListWidget;
listWidget->setFixedWidth(150);
listWidget->insertItem(0, new QListWidgetItem(
QIcon("caterpillar_head.jpg"), "caterpillar"));
listWidget->insertItem(1, new QListWidgetItem(
QIcon("momor_head.jpg"), "momor"));
listWidget->insertItem(2, new QListWidgetItem(
QIcon("bush_head.jpg"), "bush"));
hBoxLayout->addWidget(listWidget);
QStackedLayout *stackedLayout = new QStackedLayout;
hBoxLayout->addLayout(stackedLayout);
stackedLayout->addWidget(
new QLabel("<h1><font color=blue>caterpillar</font></h1>"));
stackedLayout->addWidget(new QPushButton("momor"));
stackedLayout->addWidget(new QTextEdit);
QObject::connect(listWidget, SIGNAL(currentRowChanged(int)),
stackedLayout, SLOT(setCurrentIndex(int)));
window->setLayout(hBoxLayout);
window->show();
return app.exec();
}
程式中將QListWidget的currentRowChanged() Signal連接至setCurrentIndex() Slot,currentRowChanged()會傳送目前選取的選項索引,setCurrentIndex()根據所傳送的索引值設定目前QStackedLayout要顯示哪一層元件。
程式執行時的畫面如下所示: