QT6 源,七章对话框与多窗体(14)栈式窗体 QStackedWidget:本类里代码很少。举例,以及源代码带注释。

(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_NAMESPACE

class QStackedWidgetPrivate;

/*
The QStackedWidget class provides a
    stack 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          currentIndex
                READ        currentIndex
                WRITE    setCurrentIndex
                NOTIFY      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 QFrame

QT_END_NAMESPACE

#endif // QSTACKEDWIDGET_H

(3)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值