(1)这不是本章节要用到的窗体组件,只是跟着标签窗体 QTabWidget 一起学了。这也是 QT 的 UI 界面里的最后几个容器了。而且本类也很简单。就了解一下它。 本类的继承关系如下 :
++ UI 设计界面 :
++运行效果 :
(2)本类的源代码定义于头文件 qstackedwidget . h :
#ifndef QSTACKEDWIDGET_H
#define QSTACKEDWIDGET_H#include <QtWidgets/qtwidgetsglobal.h>
#include <QtWidgets/qframe.h>QT_REQUIRE_CONFIG(stackedwidget);QT_BEGIN_NAMESPACEclass QStackedWidgetPrivate;/*
The QStackedWidget class provides astack of widgets where only one widget is visible at a time.Detailed Description :
QStackedWidget可用于创建类似于QTabWidget所提供的用户界面。
它是一个基于QStackedLayout类构建的便捷布局widget。
就像QStackedLayout一样,QStackedWidget也可以通过构建和填充多个子部件(“页面”)来创建和填充。QWidget * firstPageWidget = new QWidget;QWidget * secondPageWidget = new QWidget;QWidget * thirdPageWidget = new QWidget;QStackedWidget * stackedWidget = new QStackedWidget;stackedWidget->addWidget( firstPageWidget);stackedWidget->addWidget(secondPageWidget);stackedWidget->addWidget( thirdPageWidget);QVBoxLayout * layout = new QVBoxLayout;layout->addWidget(stackedWidget);setLayout(layout);QStackedWidget 没有提供用户切换页面的固有方法。
这通常通过一个QComboBox或一个QListWidget来实现,这些控件存储着 QStackedWidget 页面的标题。例如:QComboBox * pageComboBox = new QComboBox;pageComboBox->addItem(tr("Page 1"));pageComboBox->addItem(tr("Page 2"));pageComboBox->addItem(tr("Page 3"));connect(pageComboBox , &QComboBox::activated,stackedWidget, &QStackedWidget::setCurrentIndex);在填充堆叠型小部件时,这些小部件会被添加到一个内部列表中。indexOf()函数返回该列表中某个小部件的索引。
小部件既可以通过使用addWidget()函数添加到列表的末尾,也可以通过使用insertWidget()函数插入到指定的索引位置。
removeWidget()函数用于从堆叠型小部件中移除一个小部件。
使用count()函数可以获取堆叠型小部件所包含的小部件数量。widget ()、函数返回位于给定索引位置的控件。
屏幕上显示的控件的索引由`currentlndex()函数给出,并且可以通过`setCurrentIndex()'函数进行更改。
类似地,当前显示的控件可以通过`currentWidget()、函数获取,并通过`setCurrentWidget()函数进行修改。每当堆叠式组件中的当前小部件发生变化或某个小部件被从堆叠式组件中移除时,
将分别发出currentChanged()、和`widgetRemoved()、信号。*/class Q_WIDGETS_EXPORT QStackedWidget : public QFrame
{Q_OBJECT//此属性保存当前可见小部件的索引位置。如果没有当前小部件,则当前索引为-1。//默认情况下,此属性包含值-1,因为堆栈最初为空。Q_PROPERTY(int currentIndexREAD currentIndexWRITE setCurrentIndexNOTIFY currentChanged)//此属性表示包含在此堆叠小部件中的小部件数量。默认情况下,此属性包含值为0。Q_PROPERTY(int count READ count)public://Constructs a QStackedWidget with the given parent.explicit QStackedWidget(QWidget * parent = nullptr);~QStackedWidget();// Q_PROPERTY(int currentIndex
// READ currentIndex
// WRITE setCurrentIndex
// NOTIFY currentChanged)int currentIndex () const;QWidget * currentWidget() const;
public Q_SLOTS:void setCurrentIndex (int index);void setCurrentWidget(QWidget * w );
Q_SIGNALS:void currentChanged(int);void widgetRemoved (int index);//每当移除一个小部件时,都会发出此信号。将小部件的索引作为参数传递。public :
// Q_PROPERTY(int count READ count)int count() const;//本类代码很相似于 QTabWidget ,不再注释了。int indexOf(const QWidget *) const;QWidget * widget (int) const;int insertWidget(int index, QWidget * w);int addWidget( QWidget * w);void removeWidget( QWidget * w);protected:bool event(QEvent * e) override;private:Q_DISABLE_COPY(QStackedWidget)Q_DECLARE_PRIVATE(QStackedWidget)}; //完结 class QStackedWidget : public QFrameQT_END_NAMESPACE#endif // QSTACKEDWIDGET_H
(3)
谢谢