Qt实现侧边栏功能

news2024/10/11 18:32:41

本文介绍Qt实现侧边栏功能。

采用Qt进行界面应用程序开发时,经常遇到侧边栏功能实现,采用侧边栏可以将一些暂时不用到的功能隐藏,使用的时候点击一下相应的按钮即可弹出(动画方式)功能菜单。减少主界面控件数量,也使界面排布更加美观,本文简要介绍如何使用Qt实现侧边栏功能,并给出一个简单示例。

1.基础知识

使用Qt实现侧边栏会使用到Qt的动画控件类:QPropertyAnimation,下面对其方法进行简单介绍。

1)构造函数

函数原型如下:

QPropertyAnimation(QObject *target, const QByteArray &propertyName, QObject *parent = nullptr)

其中,

a)target:若要使某个控件实现动画效果,需在构造QPropertyAnimation类时将控件指针传入“target”

b)propertyName:常见的属性有位置:“pos”,几何尺寸:“geometry”,2者区别为在设置位置时前者采用QPoint,后者采用QRect(需要提供“width”和“height”)

c)parent:父类指针

2)设置缓冲函数

函数原型如下:

void setEasingCurve(const QEasingCurve &easing)

此函数设置动画从起始位置到结束位置渐近变化的方式(速度曲线),常见的有“Linear”,“InOutCubic”,具体可查看帮助文档。

3)设置持续时间

函数原型如下:

void setDuration(int msecs)

设置从起始位置到结束位置持续时间,单位为:ms。

4)设置起始位置

函数原型如下:

void setStartValue(const QVariant &value)

设置起始位置,根据构造函数“propertyName”的不同,设置的值也不一样,具体参见1)构造函数内容。

5)设置结束位置

函数原型如下:

void setEndValue(const QVariant &value)

设置结束位置,根据构造函数“propertyName”的不同,设置的值也不一样,具体参见1)构造函数内容。

6)启动

函数原型如下:

void start(QAbstractAnimation::DeletionPolicy policy = KeepWhenStopped)

启动动画。

2.功能实现

1)界面设计

这里将侧边栏作为一个整体放置在一个"QWidget"对象(widget)里,内部又分为2个部分,弹出/隐藏按钮放置在一个"QWidget"对象(widget_2)里,功能集合放置在另外一个"QWidget"对象(widget_3)里。界面设计如下:

注意:功能集合的"QWidget"对象(widget_3)的宽度恰好为整个"QWidget"对象(widget)隐藏时向左移动的宽度。

2)代码

a)界面构造函数

参考代码如下:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    bDisplay = false;
    ui->pushButton->setText(">>");
    ui->widget->move(-ui->widget_3->width(), 0);
    propertyAnimation = new QPropertyAnimation(ui->widget, "pos", this);
    propertyAnimation->setEasingCurve(QEasingCurve::InOutCubic);
    propertyAnimation->setDuration(1000);
}

b)按钮功能实现

参考代码如下:

void MainWindow::on_pushButton_clicked()
{
    if (!bDisplay) {
        propertyAnimation->setStartValue(QPoint(-ui->widget_3->width(), 0));
        propertyAnimation->setEndValue(QPoint(0, 0));
        ui->pushButton->setText("<<");
        bDisplay = true;
    } else {
        propertyAnimation->setStartValue(QPoint(0, 0));
        propertyAnimation->setEndValue(QPoint(-ui->widget_3->width(), 0));
        ui->pushButton->setText(">>");
        bDisplay = false;
    }
    propertyAnimation->start();
}

3.运行结果

1)隐藏

点击“<<”按钮,隐藏效果如下:

2)弹出

点击“>>”按钮,弹出效果如下:

注意

目前隐藏和弹出的动画效果是一样的,可以根据实际情况针对2种情况设置2个动画效果。

总结,本文介绍了Qt实现侧边栏功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS | JS中类的 prototype 属性和__proto__属性

大多数浏览器的 ES5 实现之中&#xff0c;每一个对象都有__proto__属性&#xff0c;指向对应的构造函数的prototype属性。Class 作为构造函数的语法糖&#xff0c;同时有prototype属性和__proto__属性&#xff0c;因此同时存在两条继承链。 构造函数的子类有prototype属性。‌ …

搭建知识库:助力大健康零售电商的快速发展

一、大健康零售电商行业的快速发展及其对知识库的需求 随着互联网技术的飞速发展和人们对健康意识的显著提升&#xff0c;大健康零售电商行业迎来了前所未有的发展机遇。这一行业不仅涵盖了传统零售业的商品销售&#xff0c;还融入了健康管理、健康咨询、健康数据分析等多元化…

『网络游戏』数据库表格转储【25】

避免勿删数据库表格&#xff0c;可以将表格存储 放到桌面即可 现在将表格删除后点击 浏览桌面表格保存即可 修改客户端脚本&#xff1a;NetSvc.cs 目的是在数据库更新异常时弹出提示以便修改 本章结束

使用 Helsinki-NLP 中英文翻译本地部署 - python 实现

通过 Helsinki-NLP 本地部署中英文翻译功能。该开源模型性价比相对高&#xff0c;资源占用少&#xff0c;对于翻译要求不高的应用场景可以使用&#xff0c;比如单词&#xff0c;简单句式的中英文翻译。 该示例使用的模型下载地址&#xff1a;【免费】Helsinki-NLP中英文翻译本…

Pura 70系列和Pocket 2已支持升级尝鲜鸿蒙NEXT,报名教程在这里

相信不少关注鸿蒙 NEXT 的人都知道&#xff0c;10月8日起&#xff0c;华为开启了鸿蒙 NEXT 系统的公测&#xff0c;但有不少人不知道的是&#xff0c;除了公测的 Mate 60 和 Mate X5 两个系列的机型&#xff0c;还有两个系列的手机其实也可以提前升级体验鸿蒙 NEXT 系统。 Pur…

随时随地一键开播的云微客实景直播神器,你想要吗?

AI实景直播系统正在以自动化、智能化的特性&#xff0c;逐渐成为直播行业的新宠。在众人频繁使用手机的时代背景下&#xff0c;直播已经成为了大多数人娱乐的方式之一&#xff0c;然而传统的直播方式不仅操作繁琐而且人员成本也高&#xff1b;现在云微客实景直播不仅可以告别人…

在工业现场,数据采集相关的对象一般有哪些类型?

在工业现场&#xff0c;数据采集相关的对象一般有以下类型&#xff1a;一、设备运行参数类1.温度 —描述&#xff1a;反映设备的发热情况、工作环境温度等&#xff0c;对于一些对温度敏感的设备&#xff08;如电子设备、精密机械等&#xff09;至关重要。 —举例&#xff1a;在…

企业注册资金如何实缴?步骤与方式详解

在企业的发展过程中&#xff0c;注册资金实缴是一个重要的环节。它不仅体现了企业的实力和信誉&#xff0c;也为企业的经营活动提供了坚实的资金保障。那么&#xff0c;在 2024 年&#xff0c;企业注册资金实缴的步骤和方式有哪些呢&#xff1f; 一、企业注册资金实缴步骤 1、确…

[C语言]结构体

1.什么是结构体 结构是多种类型的数据的集合。。且每个结构成员都有名字&#xff0c;因此当使用特定的成员时需要指明结构体成员的名字。 2.结构体的声明 以学生的数据为例&#xff1a; struct student //student结构名{char name; //name结构体成员名int height;…

传知代码-自动车牌识别检测系统(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 YOLO V8实现多种车牌检测识别&#xff01; 一、概述 使用yolov8进行车牌检测&#xff08;训练测试演示部署&#xff09; 二、支持类型 我们的车牌识别检测系统支持多种类型的车牌 具体支持类型如下&#xff1a…

云渲染农场可以用哪些CG软件!

随着数字内容创作的需求日益增长&#xff0c;3D艺术家们不断寻求更高效、更强大的渲染解决方案。云渲染农场以其灵活性和可扩展性&#xff0c;成为了许多创作者的首选。这些平台支持多种流行的CG软件&#xff0c;如Maya、3ds Max、Cinema 4D、Blender等&#xff0c;以及各种插件…

go 语言学习路线图

1. Go语言简介 Go语言的历史背景和设计理念Go的优势&#xff1a;简洁、高效、并发支持强Go的应用场景&#xff1a;微服务、云计算、系统编程 2. 开发环境设置 安装Go语言开发环境 在Windows、macOS、Linux系统上的安装方法 配置环境变量&#xff1a;GOROOT 和 GOPATH验证安装…

认知战认知作战:作战机构深陷的两大战略误解阵营

认知战认知作战&#xff1a;作战机构深陷的两大战略误解阵营 认知战认知作战&#xff1a;作战机构深陷的两大战略误解阵营 关键词&#xff1a;认知战, 认知作战, 作战机构, 如临大敌派, 水到渠成派, 战略误解, 务实之道,认知作战,新质生产力,人类命运共同体,认知战,认知域,认…

ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF集成Rviz基本流程

实现流程&#xff1a; &#xff08;1&#xff09;创建功能包&#xff0c;导入依赖 创建一个新的功能包&#xff0c;名称自定义&#xff0c;导入依赖包&#xff1a;urdf与xacro。 在当前功能包下&#xff0c;再新建几个目录&#xff1a; urdf: 存储 urdf 文件的目录 meshes:机…

如何使用ssm实现办公OA系统0

TOC 10907ssm办公OA系统10907ssm0 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于办公OA系统所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;主页、个人中心、公司公告管理、设备分类管理、办公设备管理、…

入门C语言基础

文章目录 入门C语言基础1 基础语法1.1 整形1.2 浮点型1.3 常量1.4 运算符1.4.1 算数运算符1.4.2 关系运算1.4.3 逻辑运算1.4.4 赋值运算符1.4.5 其他 1.5 if判断1.6 循环1.7 函数1.8 字符串和字符串1.9 数组 2 指针2.1 定义指针类型变量和取变量地址2.2 指针类型变量解引用2.3 …

一文讲明白初学者怎么入门大语言模型(LLM)?

关于如何入门LLM&#xff0c;大多数回答都提到了调用API、训练微调和应用。但是大模型更新迭代太快&#xff0c;这个月发布的大模型打榜成功&#xff0c;仅仅过了一个月就被其他模型超越。训练微调也已经不是难事&#xff0c;有大量开源的微调框架&#xff08;llamafactory、fi…

工业物联网关-系统说明

系统介绍 如下图所示&#xff0c;网关采集终端数据&#xff0c;经解析&#xff0c;运算&#xff0c;组成网络报文后上送云端服务器。从下而上分别是设备数据采集层&#xff0c;数据缓存计算层&#xff0c;云端对接层。主要功能模块包括虚拟产品、设备管理&#xff0c;数据缓存…

2024大模型新书《大模型基础》教材发布,开源!

我已将这本大模型资料 免费分享 出来&#xff0c;需要的小伙伴可以扫取。 浙江大学DAILY实验室毛玉仁研究员、高云君教授领衔撰写的《大模型基础》教材第一版付梓。本教材为开源教材&#xff0c;旨在为对大语言模型感兴趣的读者系统地讲解相关基础知识、介绍前沿技术。作者团…

【LLM大模型】RAG早已经过时,RAG-Fusion正当时

人工智能和自然语言处理正在以惊人的速度发展&#xff0c;现在比以往任何时候都更需要更好、更可靠的信息获取途径和使用方式。正如我们现在所面对的&#xff0c;传统系统往往难以结合丰富的上下文以最相关的方式回答我们的提问。以谷歌为例&#xff0c;通常需要进行多次搜索才…