当前位置: 首页 > news >正文

QT—布局管理器之QStackedLayout篇

1.QStackedLayout概述

QStackedLayout是Qt框架中的一种布局管理器,用于将多个窗口部件(QWidget)堆叠在一起,但同一时间只显示其中一个部件。它类似于一个多页的笔记本,用户可以通过切换来查看不同的页面。

QStackedLayout中,每个窗口部件都被视为一个“页面”,它们被按顺序添加到布局中。通过设置当前索引或使用信号槽机制,可以控制哪个页面显示在最上层。这种布局非常适合实现多页面的用户界面,例如向导界面、选项卡式界面等。它简化了多部件切换的管理,使得界面设计更加清晰和高效。

2.QStackedLayout常用函数

成员函数:

  • int QStackedLayout::addWidget(QWidget *widget) 将 widget 控件添加到 QStackedLayout 控件中。
  • int QStackedLayout::insertWidget(int index, QWidget *widget) 将 widget 控件插入到 QStackedLayout 控件指定的位置处

信号函数:

  • void QStackedLayout::currentChanged(int index) 切换当前显示的控件时,会触发此信号,index 为显示的新控件的索引。
  • void QStackedLayout::widgetRemoved(int index) 移除某个控件时,会触发此信号,index 为被移除控件的索引。

槽函数

  • void setCurrentIndex(int index) 将第 index 个控件作为要显示的控件。
  • void QStackedLayout::setCurrentWidget(QWidget *widget) 设置 widget 作为当前要实现的控件。注意,必须保证 widget 存储在 QStackedLayout 控件中。

3.QStackedLayout示例

#ifndef INDEXWIDGET_H
#define INDEXWIDGET_H#include <QWidget>
#include <QListWidget>
#include <QHBoxLayout>
#include <QStackedLayout>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
class indexWidget : public QWidget
{Q_OBJECT
public:explicit indexWidget(QWidget *parent = nullptr);~indexWidget();void initUI();
private://总布局QHBoxLayout* totalLayout;//左边控件QListWidget* channelItems;//右边三个QWidgetQWidget* widget1,*widget2,*widget3;//右边堆栈布局QStackedLayout* stackLayout;//QLabelQLabel* lab1,*lab2,*lab3;
signals:public slots:
};#endif // INDEXWIDGET_H
#include "indexwidget.h"indexWidget::indexWidget(QWidget *parent) : QWidget(parent)
{this->setWindowTitle("视频播放器");this->resize(600,400);initUI();
}indexWidget::~indexWidget()
{}void indexWidget::initUI()
{//左边this->channelItems=new QListWidget;this->channelItems->setMinimumWidth(150);this->channelItems->setFont(QFont("宋体",14));this->channelItems->addItem("首页");this->channelItems->addItem("电视剧");this->channelItems->addItem("电影");//右边this->widget1=new QWidget;//设置一个标签this->lab1=new QLabel("首页界面",this->widget1);this->widget2=new QWidget;//设置一个标签this->lab2=new QLabel("电视剧界面",this->widget2);this->widget3=new QWidget;//设置一个标签this->lab3=new QLabel("电影界面",this->widget3);//设置堆栈布局放置这三个窗口this->stackLayout=new QStackedLayout;this->stackLayout->addWidget(this->widget1);this->stackLayout->addWidget(this->widget2);this->stackLayout->addWidget(this->widget3);//总布局this->totalLayout=new QHBoxLayout;this->totalLayout->addWidget(this->channelItems,2);this->totalLayout->addLayout(this->stackLayout,4);this->setLayout(this->totalLayout);// 连接信号与槽connect(this->channelItems, &QListWidget::currentRowChanged, this->stackLayout, &QStackedLayout::setCurrentIndex);
}

效果呈现:

4.总结

在进行界面设计时,如果需要在一个布局中嵌套多个页面,通常会选择使QStackedLayout。QStackedLayout提供了自带的槽函数和信号,这使得在实现页面切换时操作十分便捷。然而,在选择布局方式之前,进行需求分析是至关重要的一步。通过深入的需求分析,我们可以明确应用程序的功能需求、用户体验目标以及交互逻辑等关键要素。只有在充分了解这些需求的基础上,才能合理地选择QStackedLayout或其他布局方式,从而确保界面设计既满足功能要求,又能提供良好的用户体验。

相关文章:

  • Windows系统编译支持GPU的llama.cpp
  • 力扣hot100——114.二叉树展开为链表
  • usb端点笔记
  • 深入理解 C++11 delete 关键字:禁用函数的艺术
  • 软件产品测试报告:如何全面评估及保障软件质量?
  • 综合练习二
  • 人工智能企业算法备案:流程、要点与服务保障
  • 制作一款打飞机游戏36:调度编辑器
  • iView Admin的side menu改为top menu
  • 大连理工大学选修课——机器学习笔记(8):Boosting及提升树
  • kkFileView文档在线预览方案及Nginx代理方式访问
  • 如何在uni-app中自定义输入框placeholder的样式
  • TM1668芯片学习心得三
  • 使用vue开发electron
  • k8s术语值ReplicaSet
  • Spring 转发 form-data 文件上传请求时中文文件名乱码
  • 基本算法之龟速乘
  • 机器翻译与数据集
  • 进程地址空间
  • Ubuntu 22.04 的 ROS 2 和 Carla 设置指南(其一)
  • 海南机场拟超23亿元收购美兰空港控股权,进一步聚焦机场主业
  • 航海王亚洲巡展、工厂店直销……上海多区推出“五五购物节”活动
  • 中国证券监督管理委员会党委委员、副主席王建军接受审查调查
  • 发挥全国劳模示范引领作用,加速汽车产业电智化转型
  • 国家发改委下达今年第二批810亿超长期特别国债资金,支持消费品以旧换新
  • 长三角铁路“五一”假期运输今启动:预计发送旅客量增6%,5月1日当天有望创新高