QStackedWidget采用堆棧的思想,将不同的widget通過addwidget()函數放進該類的對象中,并預設編号,也可顯式編号,預設從0開始。
indexOf()函數擷取顯示widget的頁号或編号
setCurrentIndex(int) 來顯示該頁号的widget。
nice~
執行個體來一發
(1)效果圖
效果圖1
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TUkFHZtJGashEZ6ZFShZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zMwIzN1YDM2ETMzITMzEDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
效果圖2
(2)代碼實作
.h檔案:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include<QListWidget>
#include<QStackedWidget>
#include<QTableWidget>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
private:
QListWidget *listwidget;
QStackedWidget *stackedwidget;
QTableWidget *tablewidget1;
QTableWidget *tablewidget2;
QTableWidget *tablewidget3;
};
#endif // DIALOG_H
.cpp檔案:
#include "dialog.h"
#include<QHBoxLayout>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
listwidget = new QListWidget;
listwidget->addItem(tr("tablewidget1"));
listwidget->addItem(tr("tablewidget2"));
listwidget->addItem(tr("tablewidget3"));
tablewidget1 = new QTableWidget(2, 2, 0);
tablewidget2 = new QTableWidget(4, 4, 0);
tablewidget3 = new QTableWidget(8, 8, 0);
stackedwidget = new QStackedWidget;
stackedwidget->addWidget(tablewidget1);
stackedwidget->addWidget(tablewidget2);
stackedwidget->addWidget(tablewidget3);
QHBoxLayout *h_layout = new QHBoxLayout;
h_layout->addWidget(listwidget);
h_layout->addWidget(stackedwidget);
h_layout->setStretchFactor(listwidget, 1);
h_layout->setStretchFactor(stackedwidget, 8);
setLayout(h_layout);
setWindowTitle(tr("QStackedWidget Test"));
setFixedSize(950, 300);
QObject::connect(listwidget, SIGNAL(currentRowChanged(int)), stackedwidget, SLOT(setCurrentIndex(int)));
}
Dialog::~Dialog()
{
}
main():
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
(3)補充說明
1、QStackedWidget裡裝了3個QTableWidget對象,分别是2X2,4X4, 8X8
2、
#include<QListWidget>
#include<QStackedWidget>
這個兩個頭檔案不可少
3、 通過調用QHBoxLayout的函數setStrechFactor()來縮放和拉伸控件。
4、<<C++ GUI QT 4>>中用另一種方法:
stackedLayout = new QStackedLayout;
stackedLayout->addWidget(appearancePage);
stackedLayout->addWidget(webBrowserPage);
stackedLayout->addWidget(mailAndNewsPage);
stackedLayout->addWidget(advancedPage);
通過QStackedWidget類中的QStackedLayout 分組布局來管理widget,效果一樣