布局类(09):【类】QStackedLayout [官翻]

文章目录

QStackedLayout 类

QStackedLayout类提供了一个小部件堆栈,其中一次只能看到一个小部件。

Header: #include < QStackedLayout >
qmake: QT += widgets
Inherits: QLayout
Inherited By:

布局类(09):【类】QStackedLayout [官翻]

详细说明

QStackedLayout可用于创建类似于QTabWidget提供的用户界面。在QStackedLayout之上还构建了一个方便的QStackedWidget类。

QStackedLayout可以填充许多子小部件(“页面”)。例如:

     QWidget *firstPageWidget = new QWidget;
     QWidget *secondPageWidget = new QWidget;
     QWidget *thirdPageWidget = new QWidget;

     QStackedLayout *stackedLayout = new QStackedLayout;
     stackedLayout->addWidget(firstPageWidget);
     stackedLayout->addWidget(secondPageWidget);
     stackedLayout->addWidget(thirdPageWidget);

     QVBoxLayout *mainLayout = new QVBoxLayout;
     mainLayout->addLayout(stackedLayout);
     setLayout(mainLayout);

QStackedLayout不提供用户切换页面的内在方法。这通常是通过QComboBox或QListWidget来完成的,QListWidget存储QStackedLayout页面的标题。例如:

     QComboBox *pageComboBox = new QComboBox;
     pageComboBox->addItem(tr("Page 1"));
     pageComboBox->addItem(tr("Page 2"));
     pageComboBox->addItem(tr("Page 3"));
     connect(pageComboBox, QOverload<int>::of(&QComboBox::activated),
             stackedLayout, &QStackedLayout::setCurrentIndex);

填充布局时,小部件将添加到内部列表中。函数的作用是:返回列表中小部件的索引。这些小部件可以使用addWidget() 函数添加到列表的末尾,也可以使用insertWidget() 函数插入到给定的索引中。函数的作用是:从布局中删除给定索引处的小部件。布局中包含的小部件的数量,可以使用count() 函数获得。

函数的作用是:返回给定索引位置的小部件。屏幕上显示的小部件的索引由currentIndex() 给定,可以使用setCurrentIndex() 更改。以类似的方式,可以使用currentWidget() 函数检索当前显示的小部件,并使用setCurrentWidget() 函数进行更改。

每当布局中的当前小部件发生更改或从布局中删除小部件时,将分别发出currentChanged() 和widgetRemoved() 信号。

公共类型

enum StackingMode

此枚举指定布局如何处理与其可见性相关的子小部件。

Constant Value Description
QStackedLayout::StackOne 0 只有当前小部件可见。这是默认值。
QStackedLayout::StackAll 1 所有小部件都可见。当前小部件只是被提升。

属性

  1. count: const int 布局中包含的小部件数

    • virtual int count() const override
  2. currentIndex: int 可见小部件的索引位置
    如果没有当前小部件,则当前索引为-1。

    • int currentIndex() const
    • void setCurrentIndex(int index)

    信号:

    • void currentChanged(int index)
  3. stackingMode: StackingMode 确定处理子窗口小部件的可见性的方式

    默认值为StackOne。将属性设置为StackAll允许您使用覆盖小部件的布局,这些小部件在其他小部件(例如图形编辑器)上进行额外绘制。

    • QStackedLayout::StackingMode stackingMode() const
    • void setStackingMode(QStackedLayout::StackingMode stackingMode)

公共函数

构造和析构

  • QStackedLayout(QLayout *parentLayout)
  • QStackedLayout(QWidget *parent)
  • QStackedLayout()
  • virtual ~QStackedLayout()

属性相关

  • int currentIndex() const
  • void setCurrentIndex(int index)
  • QStackedLayout::StackingMode stackingMode() const
  • void setStackingMode(QStackedLayout::StackingMode stackingMode)

增加和索引

  • int addWidget(QWidget *widget)
  • int insertWidget(int index, QWidget *widget)
  • QWidget * currentWidget() const
  • QWidget * widget(int index) const

重写的公共函数

增删查

  • virtual void addItem(QLayoutItem *item) override
  • virtual QLayoutItem * takeAt(int index) override
  • virtual int count() const override
  • virtual QLayoutItem * itemAt(int index) const override

尺寸相关

  • virtual bool hasHeightForWidth() const override
  • virtual int heightForWidth(int width) const override
  • virtual QSize minimumSize() const override
  • virtual void setGeometry(const QRect &rect) override
  • virtual QSize sizeHint() const override

公共槽

  • void setCurrentIndex(int index)
  • void setCurrentWidget(QWidget *widget)

信号

  • void currentChanged(int index)
  • void widgetRemoved(int index)

演示代码

布局类(09):【类】QStackedLayout [官翻]

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    app.setApplicationName ("QStackedLayout");

    QDialog dialog;
    dialog.setWindowFlag (Qt::WindowContextHelpButtonHint,false);

    QWidget *firstPageWidget = new QWidget;
    QWidget *secondPageWidget = new QWidget;
    QWidget *thirdPageWidget = new QWidget;
    firstPageWidget->setStyleSheet ("background:red");
    secondPageWidget->setStyleSheet ("background:green");
    thirdPageWidget->setStyleSheet ("background:blue");

    QStackedLayout *stackedLayout = new QStackedLayout;
    stackedLayout->addWidget(firstPageWidget);
    stackedLayout->addWidget(secondPageWidget);
    stackedLayout->addWidget(thirdPageWidget);

    QComboBox *pageComboBox = new QComboBox;
    pageComboBox->addItem("Page 1");
    pageComboBox->addItem("Page 2");
    pageComboBox->addItem("Page 3");
    QObject::connect(pageComboBox, QOverload<int>::of(&QComboBox::activated),
            stackedLayout, &QStackedLayout::setCurrentIndex);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget (pageComboBox);
    mainLayout->addLayout(stackedLayout);

    dialog.setLayout(mainLayout);

    dialog.resize (400,200);
    dialog.show();
    return app.exec();
}
上一篇:Qt画中局部放大(内部显示)


下一篇:如何将Python控制台输出重定向到QTextBox