Qt之QStackedLayout

简述

QStackedLayout继承自QLayout。

QStackedLayout类提供了多页面切换的布局,一次只能看到一个界面。

QStackedLayout可用于创建类似于QTabWidget提供的用户界面。也有建立在QStackedLayout之上的便利类QStackedWidget。

  • 简述
  • 使用
    • 效果
    • 源码
  • 接口
  • 总结

使用

一个QStackedLayout可以用一些子页面进行填充。

效果

源码

QPushButton *pButton = new QPushButton(this);
QLabel *pFirstPage= new QLabel(this);
QLabel *pSecondPage = new QLabel(this);
QLabel *pThirdPage = new QLabel(this);
m_pStackedLayout = new QStackedLayout();

pButton->setText(QStringLiteral("点击切换"));
pFirstPage->setText(QStringLiteral("一去丶二三里"));
pSecondPage->setText(QStringLiteral("青春不老,奋斗不止!"));
pThirdPage->setText(QStringLiteral("纯正开源之美,有趣、好玩、靠谱。。。"));

// 添加页面(用于切换)
m_pStackedLayout->addWidget(pFirstPage);
m_pStackedLayout->addWidget(pSecondPage);
m_pStackedLayout->addWidget(pThirdPage);

QVBoxLayout *pLayout = new QVBoxLayout();
pLayout->addWidget(pButton, 0, Qt::AlignLeft | Qt::AlignVCenter);
pLayout->addLayout(m_pStackedLayout);
pLayout->setSpacing(10);
pLayout->setContentsMargins(10, 10, 10, 10);
setLayout(pLayout);

// 连接切换按钮信号与槽
connect(pButton, &QPushButton::clicked, this, &MainWindow::switchPage);

// 切换页面
void MainWindow::switchPage()
{
    int nCount = m_pStackedLayout->count();
    int nIndex = m_pStackedLayout->currentIndex();

    // 获取下一个需要显示的页面索引
    ++nIndex;

    // 当需要显示的页面索引大于等于总页面时,切换至首页
    if (nIndex >= nCount)
        nIndex = 0;

    m_pStackedLayout->setCurrentIndex(nIndex);
}

接口

  • int addWidget(QWidget * widget)

    添加页面,并返回页面对应的索引

  • int currentIndex() const

    获取当前页面的索引

  • QWidget * currentWidget() const

    获取当前页面

  • int insertWidget(int index, QWidget * widget)

    在索引index位置添加页面

  • void setStackingMode(StackingMode stackingMode)

    设置显示模式,StackingMode有两个值,一个是StackOne(默认-显示一个页面),一个是StackAll(显示所有页面),一般不使用。

  • QWidget * widget(int index) const

    获取索引index所对应的页面

总结

一般情况,常用的两种方式:

  • 根据currentWidget()来判断当前页面,然后通过setCurrentWidget()来设置需要显示的页面。
  • 根据currentIndex()来判断当前页面索引,然后通过setCurrentIndex()来设置需要显示的页面。
时间: 2024-10-05 06:55:43

Qt之QStackedLayout的相关文章

将vim作为QT开发的IDE

转载请注明链接与作者huihui1988 用了一段时间的vim,喜欢上了这种简洁高效的编辑器.恰逢正在学习QT中,于是将vim变成了开发QT的工具.以下是具体配置. 一.语法高亮支持: 1.打开VIMDIR/vim72/syntax/cpp.vim,加入 syn keyword cppStatement SLOT,SIGNAL syn keyword cppAccess slots,signals 2.增加QT的类型名: syn keyword cType ActiveQt Q3Accel Q3

QT开发(二十一)——QT布局管理器

QT开发(二十一)--QT布局管理器 一.布局管理器简介 QT中使用绝对定位的布局方式无法自适应窗口的变化. QT中提供了对界面组件进行布局管理的类,用于对界面组件进行管理,能够自动排列窗口中的界面组件,窗口大小变化后自动更新界面组件的大小. QLayout是QT中布局管理器的抽象基类,通过对QLayout的继承,实现了功能各异且互补的布局管理器. 布局管理器不是界面组件,而是界面组件的定位策略. 任意容器类型的组件都可以指定布局管理器. 同一个布局管理器管理中的组件拥有相同的父组件,在设置布局

Qt布局管理器综合实例

1.布局管理器的综合实例------模拟向导用户界面(Windows平台) -----练习开发一个向导用户界面 @1:在同一界面上展现不同的向导页面 @2:通过上一步和下一步按钮进行切换 @3:不同页面上的元素组件和这些组件排布都不相同 @4:页面中的组件通过布局管理进行排布 (1)通过布局嵌套进行界面设计 @1:上一步和下一步这两个按钮用水平布局管理器QHBoxLayout来进行管理,不同页面上的显示的内容只有按钮不变,所以讲不同页面的内容用栈式布局管理器QStackedLayout进行管理,

QT 学习笔记概述

以下笔记为在看书和实践的过程中的部分记录总结: 0. 窗口布局 1) 支持绝对布局和布局管理器布局; 2) 绝对布局不够灵活.无法自动调整大小,需要手动编写代码调整: 3) 布局管理器管理布局比较灵活.可自动调整管理的其下部件大小.位置: 4) 布局管理器目前有基本布局QBoxLayout(水平布局QHBoxLayout.垂直QVBoxLayout).栅格布局QGridLayout.表单布局QFormLayout.栈布局QStackedLayout: 5) 还有其他的布局,不过一般用于其他目的,

浅谈qt 布局器

在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是我们不得不关注的一个重点了. 我们进入正题,今天主要和大家分享一下Qt方面关于布局管理器的使用: 一.基本概念   Qt 提供了几种在窗口部件上管理子窗口部件的基本方式.一共有3 种方法用于管理窗体上子窗口部件的布局:绝对位置法.人工布局法和布局管理器法.相比于使用固定尺寸和位置,布局提供了功能强大

qt——常用的布局方法

布局相关对象及简介 窗体上的所有的控件必须有一个合适的尺寸和位置.Qt提供了一些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QStackLayout.(布局管理类)这些类简单易用,无论在代码中还是用Qt Designer开发程序都能用到. 1)         布局类简介 QHBoxLayout:水平布局 QVBoxLayout:垂直布局 QGridLayout: 表格布局 QGridLayout::addWidget()语法 layo

Qt 布局管理器

在一个颜值当道的今天,无论买衣服,买车还是追星,颜值的高低已经变成了大家最看重的(不管男性女性都一样,千万别和我说你不是):而对于程序猿来说,开发一款软件,不再只注重逻辑和稳定性,美观和用户友好性也是我们不得不关注的一个重点了. 我们进入正题,今天主要和大家分享一下Qt方面关于布局管理器的使用: 一.基本概念   Qt 提供了几种在窗口部件上管理子窗口部件的基本方式.一共有3 种方法用于管理窗体上子窗口部件的布局:绝对位置法.人工布局法和布局管理器法.相比于使用固定尺寸和位置,布局提供了功能强大

Qt学习笔记-Widget布局管理

Qt学习笔记4-Widget布局管理 以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,finddialog.h,finddialog.cpp及main.cpp. //finddialog.h代码 #ifndef FINDDIALOG_H#define FINDDIALOG_H #include <QDialog> class QCheckBox;class QLabel;class QLineE

Qt入门之常用qt控件认知之QLayout

了解布局,首先得清楚一个概念,就是容器控件.容器控件就是可以容纳别的控件的一种控件,如QWidget,所以就会出现父类控件与子类控件.为了很好的管理这种父子类控件,常用的有几种方法: 第一种就是使用绝对位置,setGeometry定位子类控件相对于父类控件.第二种就是常见的布局. 布局管理,其实就是为容器控件管理子类控件的位置和尺寸,所以布局本身没有存在的意义,其需要和容器控件搭配使用,为容器控件管理子控件服务. 而布局QLayout类其实只是一组预先撰写好的代码,相当于提前写出了以一个控件存放