一、QStackedLayout概述
QStackedLayout
是 Qt 中的一个布局管理器,用于管理多个子窗口或页面的堆叠显示。它允许你在一个固定区域内显示多个子窗口,但每次只显示其中一个子窗口,其他子窗口被堆叠在后面。与 QStackedWidget
类似,但 QStackedLayout
是一个布局管理器,可以与其他布局管理器一起使用。
以下是有关 QStackedLayout
的详细介绍和使用方法:
-
多页容器:
QStackedLayout
允许你将多个子窗口或页面放在一个固定区域内。 -
单页显示:在任何给定时间,只有一个子窗口是可见的,其他子窗口被隐藏,可以通过切换来显示不同的子窗口。
-
切换效果:你可以通过切换页面的方式,如设置当前页或使用动画效果,切换可见的子窗口。
二、常用函数介绍
1.addWidget:将子窗口或页面添加到堆叠布局中
QStackedLayout *stackedLayout = new QStackedLayout; QWidget *page1 = new QWidget; QWidget *page2 = new QWidget; stackedLayout->addWidget(page1); stackedLayout->addWidget(page2);
2.insertWidget:在指定索引位置插入子窗口或页面
stackedLayout->insertWidget(1, page3); // 在第二个位置插入一个页面
3.setCurrentIndex:设置当前显示的子窗口的索引
stackedLayout->setCurrentIndex(1); // 显示第二个子窗口
4.currentIndex:获取当前显示的子窗口的索引
int index = stackedLayout->currentIndex();
5.count:获取堆叠布局中子窗口的数量
stackedLayout->setCurrentWidget(page2); // 显示第二个子窗口
6.setCurrentWidget:设置当前显示的子窗口为指定的子窗口对象
stackedLayout->setCurrentWidget(page2); // 显示第二个子窗口
7.currentWidget:获取当前显示的子窗口的指针
QWidget *currentPage = stackedLayout->currentWidget();
8.slideInNext 和 slideInPrev:切换到下一个或上一个子窗口,带有滑动效果
stackedLayout->slideInNext(); stackedLayout->slideInPrev();
这些函数可以帮助你配置和管理 QStackedLayout
布局管理器,以便在一个固定区域内显示多个子窗口,并根据需要切换它们。你可以使用这些函数来创建多页的用户界面,如向导、选项卡和多视图应用程序。通过连接 currentChanged
信号,你还可以监测子窗口的切换事件。
三、示例代码
#include "main_window.h" #include <QLabel> #include <QPushButton> #include <QListWidget> #include <QLineEdit> MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { this->setWindowTitle("堆栈布局"); this->setFixedSize(600, 400); QPushButton *pButton = new QPushButton("点击切换", this); connect(pButton, &QPushButton::clicked, this, &MainWindow::onButtonClicked); QLabel *pFirstPage = new QLabel(this); pFirstPage->setStyleSheet("QLabel{background-color:rgb(255, 0, 0)}"); QLabel *pSecondPage = new QLabel(this); pSecondPage->setStyleSheet("QLabel{background-color:rgb(255, 255, 0)}"); QLabel *pThirdPage = new QLabel(this); pThirdPage->setStyleSheet("QLabel{background-color:rgb(255, 0, 255)}"); // 添加页面(用于切换) m_pStackedLayout = new QStackedLayout(); m_pStackedLayout->addWidget(pFirstPage); m_pStackedLayout->addWidget(pSecondPage); m_pStackedLayout->addWidget(pThirdPage); QVBoxLayout *pLayout = new QVBoxLayout(this); pLayout->addWidget(pButton, 0, Qt::AlignLeft | Qt::AlignVCenter); pLayout->addLayout(m_pStackedLayout); pLayout->setSpacing(10); pLayout->setContentsMargins(10, 10, 10, 10); this->setLayout(pLayout); } MainWindow::~MainWindow() { } void MainWindow::onButtonClicked() { int nextPage = (m_pStackedLayout->currentIndex() + 1) % m_pStackedLayout->count(); m_pStackedLayout->setCurrentIndex(nextPage); }
效果如下:
标签:窗口,Qt,pStackedLayout,堆栈,QStackedLayout,new,stackedLayout,QLabel From: https://www.cnblogs.com/TechNomad/p/17792929.html