堆棧窗口可以根據選擇項的不同顯示不同的窗體
- // stackeddlg.h
- #ifndef STACKEDDLG_H
- #define STACKEDDLG_H
- #include <QDialog>
- #include <QLabel>
- #include <QListWidget>
- #include <QStackedWidget>
- class StackedDlg : public QDialog
- {
- Q_OBJECT
- public:
- explicit StackedDlg(QWidget *parent = 0);
- signals:
- public slots:
- private:
- QLabel *textLabel;
- QLabel *showLabel;
- QLabel *aboutLabel;
- QListWidget *list;
- QStackedWidget *stack;
- };
- #endif // STACKEDDLG_H
- //stackeddlg.cpp
- #include "stackeddlg.h"
- #include <QHBoxLayout>
- StackedDlg::StackedDlg(QWidget *parent) :
- QDialog(parent)
- {
- //創建一個QListWidget控件 並向其中添加列表項
- list = new QListWidget();
- list->insertItem(0, tr("文本窗口"));
- list->insertItem(1, tr("顯示窗口"));
- list->insertItem(2, tr("關於窗口"));
- textLabel = new QLabel(tr("學習使用堆棧窗口"));
- showLabel = new QLabel(tr("僅僅是一個示例程序"));
- aboutLabel = new QLabel(tr("歡迎交流,共同學習"));
- //創建QStackedwidget控件
- stack = new QStackedWidget();
- //將控件添加到堆棧窗口中
- stack->addWidget(textLabel);
- stack->addWidget(showLabel);
- stack->addWidget(aboutLabel);
- //使用一個水平布局管理器對對話框進行布局
- QHBoxLayout *mainLayout = new QHBoxLayout(this);
- mainLayout->addWidget(list);
- mainLayout->addWidget(stack, 0, Qt::AlignHCenter);
- //設置mainLayout的邊框與對話框邊緣的距離
- mainLayout->setMargin(5);
- mainLayout->setSpacing(5);
- //信號與槽的連接,實現按選擇顯示窗體
- //此處堆棧窗口的index按插入的順序從0依次排序,與QListWidget的條目排序一致
- connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));
- this->setWindowTitle(tr("堆棧窗口"));
- }
- //main.cpp
- #include <QApplication>
- #include <QTextCodec>
- #include "stackeddlg.h"
- int main(int argc, char *argv[])
- {
- QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
- QApplication app(argc, argv);
- StackedDlg dlg;
- dlg.show();
- return app.exec();
- }