一、前言
????????QStackedWidget繼承于QFrame,QFrame繼承于QWidget,是Qt常用的堆棧窗口部件。
??????? 框架類QFrame介紹
?????????QStackedWidget堆棧窗口,根據下標切換,一次顯示一個小部件,常用于應用界面切換、圖片輪詢播放等場景。
?二、QStackedWidget類
1、count
??????? 該屬性表示當前堆棧子部件的數量。
int count() const //獲取選項卡數
2、currentIndex
??????? 該屬性表示當前顯示的子部件的下標,如果子部件數量為0,則返回-1。
int currentIndex() const //獲取當前選項卡下標
void setCurrentIndex(int index) //設置當前選項卡下標
3、公共方法
1)增加子部件
??????? 使用addWidget增加子部件,默認插入到尾部。
int addWidget(QWidget *widget)
2)插入子部件
??????? 使用insertWidget在索引的位置插入子部件,如果索引index超出范圍,那么插入到尾部,返回值為實際插入的位置。
int insertWidget(int index, QWidget *widget)
3)移除子部件
??????? 使用removeWidget移除子部件,注意這里是從布局中移除,導致小部件被隱藏起來。
void removeWidget(QWidget *widget)
4)查找子部件
??????? 使用indexOf找到某子部件索引,如果不存在則返回-1。
int indexOf(QWidget *widget) const
5)設置/讀取子部件
??????? 如果子部件不存在則返回空指針。
QWidget *widget(int index) const
QWidget *currentWidget() const
void setCurrentWidget(QWidget *widget)
4、信號
??????? 當前索引發生變化觸發currentChanged信號。
void currentChanged(int index)
??????? 子部件被移除觸發widgetRemoved信號。
void widgetRemoved(int index)
?5、實例
??????? 根據下拉框的選項修改stackWidget的顯示子部件。
QFont serifFont("Times", 20, QFont::Bold);
QWidget *firstPageWidget = new QWidget;
QLabel *firstble = new QLabel("Page1",firstPageWidget);
firstble->setFont(serifFont);
QWidget *secondPageWidget = new QWidget;
QLabel *secondble = new QLabel("Page2",secondPageWidget);
secondble->setFont(serifFont);
QWidget *thirdPageWidget = new QWidget;
QLabel *thirdble = new QLabel("Page3",thirdPageWidget);
thirdble->setFont(serifFont);QStackedWidget *stackedWidget = new QStackedWidget(this);
stackedWidget->addWidget(firstPageWidget);
stackedWidget->addWidget(secondPageWidget);
stackedWidget->addWidget(thirdPageWidget);
stackedWidget->setFrameStyle(QFrame::Panel | QFrame::Raised);
stackedWidget->move(300,200);
stackedWidget->setFixedWidth(200);
stackedWidget->setFixedHeight(200);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(stackedWidget);
setLayout(layout);QComboBox *pageComboBox = new QComboBox(this);
pageComboBox->addItem(tr("Page 1"));
pageComboBox->addItem(tr("Page 2"));
pageComboBox->addItem(tr("Page 3"));
connect(pageComboBox, QOverload<int>::of(&QComboBox::activated),stackedWidget, &QStackedWidget::setCurrentIndex);
pageComboBox->move(100,200);