首页 > 其他分享 >Qt之堆栈布局(QStackedLayout)

Qt之堆栈布局(QStackedLayout)

时间:2023-10-27 18:12:18浏览次数:36  
标签:窗口 Qt pStackedLayout 堆栈 QStackedLayout new stackedLayout QLabel

一、QStackedLayout概述

QStackedLayout 是 Qt 中的一个布局管理器,用于管理多个子窗口或页面的堆叠显示。它允许你在一个固定区域内显示多个子窗口,但每次只显示其中一个子窗口,其他子窗口被堆叠在后面。与 QStackedWidget 类似,但 QStackedLayout 是一个布局管理器,可以与其他布局管理器一起使用。

以下是有关 QStackedLayout 的详细介绍和使用方法:

  1. 多页容器:QStackedLayout 允许你将多个子窗口或页面放在一个固定区域内。

  2. 单页显示:在任何给定时间,只有一个子窗口是可见的,其他子窗口被隐藏,可以通过切换来显示不同的子窗口。

  3. 切换效果:你可以通过切换页面的方式,如设置当前页或使用动画效果,切换可见的子窗口。

二、常用函数介绍

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

相关文章

  • Qt之停靠窗口(QDockWidget)
    一、QDockWidget概述QDockWidget是Qt中的一个窗口部件,用于创建可停靠的窗口,通常用于构建多文档接口(MDI)或可定制的用户界面。QDockWidget允许用户将窗口停靠在应用程序的主窗口周围,或将其拖动到独立的浮动窗口中。以下是有关QDockWidget的详细介绍和使用方法:QDockWidget......
  • docker部署开源MQTT平台mosquitto
    一、安装docker在开始之前,确保你的系统上已经安装了Docker。Docker提供了一个开放的平台,可以在容器中打包、分发和运行应用程序。你可以从Docker官方网站下载和安装适合你操作系统的Docker版本。二、拉取MosquittoDocker镜像这里我们以阿里云的Ubuntu系统为例。想要在docker中部......
  • Qt和ffmpeg结合制作全能解码播放器
    #include<QCoreApplication>#include<QApplication>#include<QWidget>#include<QVBoxLayout>#include<QVideoWidget>#include<QAudioOutput>#include<QDebug>extern"C"{#include<libavformat/avfor......
  • Qt之分裂器(QSplitter)
    一、QSplitter概述QSplitter是Qt中的一个布局管理器,允许用户在应用程序窗口中创建可拖动的分隔器,以便调整多个子窗口或控件的大小。它是一种非常有用的布局管理器,用于创建可分隔的多个部分,通常用于分割、重新排列和管理用户界面中的多个区域。以下是有关QSplitter的详细介......
  • Linux下安装Qt6的问题及解决
    Linux下安装完Qt6,新建Qt/QtQuickCMake工程编译出现如下错误:Foundpackageconfigurationfile:Qt6Config.cmakebutitsetQt6FOUNDtoFALSEsopackage"Qt6"isconsideredtobeNOTFOUND.Reasongivenbypackage:FailedtofindrequiredQtcomponen"Quick&......
  • Qt Creator常用快捷键及技巧提升编码效率
    转:https://blog.csdn.net/luoyayun361/article/details/105431913https://blog.csdn.net/u_topian/article/details/130366561https://blog.csdn.net/Zeek_0114/article/details/98938547代码编辑1.定义触发片段打开工具->选项->文本编辑器->片段,右侧点击添加2///三个斜杠......
  • qt 设置背景图片,图片出现锯齿
    qt给控件添加背景图片,通过有3种方式background-image;border-image;image其中通常用border-image;image。使用border-image,会出现图片失真,锯齿状严重ui->pushButton->setStyleSheet(“QPushButton{border-image:url(:/images/XXX.png);}”);使用image,会有边框,不适合qpushBu......
  • 通讯 --- C# .NET CORE MQTT 心跳服务
    转自:https://www.cnblogs.com/hkzw/p/17689443.htmlMQTT服务可以自行学习,这里只是记录一下写的结果,粘贴即用。首先引入包 MQTTnet,注意这个包这里的代码是4.0一下版本我用的3.1.2版本的4.以上是另外的写法,该内容中4不支持我 直接下降版本到3.1.2可以了。如果你一......
  • ASP.NET Core 使用 MQTTnet 实现 MQTT 通讯协议
    转自:https://www.twle.cn/t/19383MQTT是啥呢?MQTT,英文全称 MessageQueuingTelemetryTransport,是一种基于 发布/订阅 模式的轻量级的消息传输协议,由IBM公司出品。物联网兴起后,MQTT因为够轻量,低带宽和低延时而被推上浪潮之巅。其实,MQTT几乎就是专门为网络受限设备、低......
  • Qt开发之图形视图
    一、GraphicsView框架结构Qt的GraphicsView框架是一个用于2D图形渲染和交互的框架,它为开发者提供了一种灵活的方式来创建自定义的图形界面和场景。以下是QtGraphicsView框架的主要组件和结构分析:场景(Scene):QGraphicsScene是GraphicsView的核心概念之一。场景充当图形项(Item)的......