QStackedLayout 类
QStackedLayout类提供了一个小部件堆栈,其中一次只能看到一个小部件。
Header: | #include < QStackedLayout > |
---|---|
qmake: | QT += widgets |
Inherits: | QLayout |
Inherited By: |
详细说明
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 | 所有小部件都可见。当前小部件只是被提升。 |
属性
-
count: const int 布局中包含的小部件数
- virtual int count() const override
-
currentIndex: int 可见小部件的索引位置
如果没有当前小部件,则当前索引为-1。- int currentIndex() const
- void setCurrentIndex(int index)
信号:
- void currentChanged(int index)
-
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)
演示代码
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();
}