《QT实用小工具·六十六》基于QT开发的界面收缩栏

1、概述
源码放在文章末尾

该项目实现了一个界面收缩栏的效果,该收缩栏包含如下功能:
1、可以在收缩栏中添加若干个界面
2、鼠标点击收缩栏可以展开或收起界面
3、鼠标拖动收缩栏可以和其他界面互换位置

项目demo演示如下所示:
在这里插入图片描述

使用方式:
1、创建对象

CollpasePagePlugin* collpasePagePlugin = new CollpasePage();

2、在布局中放置收缩栏

collpasePagePlugin->SetLayout((QVBoxLayout*)ui.groupBox->layout(), -1);

3、在收缩栏中添加两个界面

//添加第一个界面widget1
collpasePagePlugin->addWidget(widget1, "MTFSetting", QIcon(":/Gen2WGMTFTester/images/MTF/MTFsetting.png"));//添加第二个界面widget2
collpasePagePlugin->addWidget(widget2, "LEDControl", QIcon(":/Gen2WGMTFTester/images/MTF/LED.jpg"));//设置第一个界面默认收缩
collpasePagePlugin->setItemExpand(0, false);
//设置第二个界面默收缩
collpasePagePlugin->setItemExpand(1, false);

项目部分代码如下所示:

#ifndef COLLAPSEPAGECOMPONENT_H
#define COLLAPSEPAGECOMPONENT_H#include "collapsepagecomponent_global.h"
#include <QFrame>
#include <QWidget>
#include <QIcon>
#include <QVBoxLayout>
#include "CollpasePagePlugin.h"class AdvancedToolBoxPrivate;
class ToolBoxTitle;
class ToolBoxSplitterHandle;class COLLAPSEPAGECOMPONENT_EXPORT AdvancedToolBox : public QWidget
{Q_OBJECTpublic:explicit AdvancedToolBox(QWidget* parent = nullptr);~AdvancedToolBox();int indexOf(QWidget* widget);QWidget* takeIndex(int index);QWidget* widget(int index);void setItemExpand(int index, bool expand = true);void setItemVisible(int index, bool visible = true);void setItemText(int index, const QString& text);void setItemIcon(int index, const QIcon& icon);QString itemText(int index);QIcon itemIcon(int index);int textIndentation();void resetTextIndentation(int indent = -1);public:void SetLayout(QVBoxLayout* qVBoxLayout, int index, int stretch = 0); //index为负默认放在布局的最后面void addWidget(QWidget* widget, const QString& label, const QIcon& icon = QIcon()); //把界面加到抽屉栏public:int m_currentHeight = 200;public slots:void updateWidgetHeight(int height);protected:bool event(QEvent* e);void paintEvent(QPaintEvent* event);void dragEnterEvent(QDragEnterEvent* event);void dragMoveEvent(QDragMoveEvent* event);void dropEvent(QDropEvent* event);void dragLeaveEvent(QDragLeaveEvent* event);void startDrag(int index, const QPoint& gpos);void mouseMoveEvent(QMouseEvent* event);
private:Q_DECLARE_PRIVATE(AdvancedToolBox)Q_DISABLE_COPY(AdvancedToolBox)QScopedPointer<AdvancedToolBoxPrivate> d_ptr;private:friend class ToolBoxTitle;friend class ToolBoxSplitterHandle;
};class ToolBoxSplitterHandle : public QWidget
{
public:ToolBoxSplitterHandle(AdvancedToolBox* parent);void setIndex(int index);int index();
protected:void mouseMoveEvent(QMouseEvent*) override;void mousePressEvent(QMouseEvent*) override;void mouseReleaseEvent(QMouseEvent*) override;private:int _index = -1;bool pressed = false;QPoint moveStart;
};class COLLAPSEPAGECOMPONENT_EXPORT CollpasePage : public QObject, public CollpasePagePlugin
{Q_OBJECTQ_INTERFACES(CollpasePagePlugin)Q_PLUGIN_METADATA(IID AbstractInterface_iid FILE "CollapsePageComponent.json")
public:CollpasePage(QObject* parent = nullptr);~CollpasePage();public:virtual QWidget* GetWidget();virtual void setItemExpand(int index, bool expand = true);virtual void SetLayout(QVBoxLayout* qVBoxLayout, int index, int stretch = 0);virtual void addWidget(QWidget* widget, const QString& label, const QIcon& icon = QIcon());
private:AdvancedToolBox* m_advancedToolBox;
};#endif

源码下载

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

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

相关文章

jenkins 用户权限(Manage-Roles)

本次需求将DEV环境和SIT环境分开,SIT用户登录上来只能看他的SIT项目和视图 安装roles插件 进入 manage role 项目授权 用户 正则匹配你需要的项目 dev .*-dev*或者.*-dev$ sit .*-sit最后细分assign role 测试使用sit账号登录 ,视图和项目都是SIT账号的

移动云:开发者手中的未来钥匙

《移动云&#xff1a;开发者手中的未来钥匙》 引言一、无缝集成&#xff0c;加速开发进程二、数据智能&#xff0c;洞悉用户心声三、安全合规&#xff0c;护航创新之旅四、成本优化&#xff0c;助力轻装前行总结 引言 在科技日新月异的今天&#xff0c;移动云已成为推动行业变革…

kube-apiserver内存占用过多 go tool pprof 入门

目录 环境问题排查1、kube-apiserver %CPU 146 正常&#xff0c;%MEM 高达70&#xff0c;&#xff0c;load average 400&#xff0c;出现kswapd0进程。2、k describe node 看到 SystemOOM3、是否大量连接导致&#xff1f;4、通过prom查看指标5、访问K8s API6、pprof 火焰图 解决…

云服务器购买之后到部署项目的流程

1.通过账号密码登录百度智能云控制台; 2.进入对应的服务器‘云服务器BBC’ 找到’实例‘即找到对应的服务器列表; 此时通过本地电脑 1.cmd命令提示符 PING 服务器公网地址不通&#xff1b; 2.通过本地电脑进行远程桌面连接不通 原因&#xff1a;没有关联安全组&#xff0c;或者…

Linux的nload/nettraf命令实时网卡流量监测

对于linux的网卡上下行流量监测方法有很多 例如nload 现成的nload命令 现成的有 nload 安装 yum -y install nload 查看所有网卡实时网速 sudo nload -m 按enter/上下翻页键即可切换网卡 查看指定网卡实时网速 sudo nload eth0 -m 基于nettraf编译的rpm包 当然也可以你…

MySQL:如果用left join的话,左边的表一定是驱动表吗

一、前言 在日常开发过程中关于MySQL的优化方面&#xff0c;我们知道小表驱动大表原理。例如left join&#xff0c;放在左边的表作为驱动表。但是用left join的话&#xff0c;左边的表一定是驱动表吗&#xff0c;本文将通过案例分析给出详细分析。 二、概念 在MySQL中&#xf…

Android开发 -- JNI开发

1.配置JNI环境 创建JNI文件夹 在项目的主目录中创建一个名为 JNI 的文件夹。这个文件夹将包含所有的本地源代码和配置文件。 编写Android.mk文件 这个文件是一个 Makefile&#xff0c;用来指导 NDK 如何编译和构建本地代码。 #清除之前定义的变量&#xff0c;确保每个模块的…

安装HAP时提示“code:9568344 error: install parse profile prop check error”错误

问题现象 在启动调试或运行应用/服务时&#xff0c;安装HAP出现错误&#xff0c;提示“error: install parse profile prop check error”错误信息。 解决措施 该问题可能是由于应用使用了应用特权&#xff0c;但应用的签名文件发生变化后未将新的签名指纹重新配置到设备的特…

[Java EE] 网络编程与通信原理(三):网络编程Socket套接字(TCP协议)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

BookStack VS HelpLook两款知识库软件的区别

现在很多企业都会进行知识管理&#xff0c;在这个过程中&#xff0c;选择一个合适的知识库软件是一个不可避免的问题。在众多知识库软件中&#xff0c;HelpLook和BookStack这两款软件备受企业瞩目。不知如何选择&#xff0c;今天LookLook同学就简单介绍一下这两款知识库的区别&…

5.27作业

定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。 #include <iostream>using namespace std; namespace my_space {string s1;string reverse1(string s1);} using namespace my_space; int m…

深入解读 ChatGPT 的基本原理(个人总结版)

引言 背景 人工智能&#xff08;AI&#xff09;技术自20世纪中期诞生以来&#xff0c;经历了多次革新和进步。从最早的图灵测试&#xff0c;到20世纪末的深蓝计算机击败国际象棋冠军&#xff0c;再到21世纪初谷歌AlphaGo击败围棋冠军&#xff0c;AI技术的飞速发展改变了人们的…

BEVFormer论文详细解读

文章目录 1. 前言1.1 3D VS 4D1.2 .特征融合过程中可能遇到的问题1.3 .BEV提出背景1.4 .BEV最终得到了什么1.5 .输入数据格式 2. 背景/Motivation2.1 为什么视觉感知要用BEV&#xff1f;2.2 生成BEV视角的方法有哪些&#xff1f;为何选用Transformer呢&#xff1f; 3. Method/S…

Vapor Mode:Vue.js 的速度与激情,代码界的闪电侠

大家好&#xff0c;我是宝哥。 在快速发展的网络开发世界中&#xff0c;创新的Vue.js团队给我们带来了Vapor Mode。这个新模式优化了Vue的核心渲染过程&#xff0c;帮助我们的应用程序像轻烟一样运行&#xff0c;开发者无需深入复杂的优化工作。 在这篇文章中&#xff0c;我们将…

【微积分】Grant Sanderson

梯度&#xff1a;将各个偏导打包 定义&#xff1a;direction of steepest ascent 梯度向量的长度&#xff1a;最速上升方向的陡峭程度 方向导数&#xff1a;偏导的一种拓展 【托马斯微积分学习日记】13.1-线积分_哔哩哔哩_bilibili 概述 16.1line integrals of scalar funct…

直播预告:TinyVue 组件库实战解析,提升组件库构建技能!

在复杂的编码世界里&#xff0c;大家总希望能够寻找更高效、更简洁的解决方案来优化工作流程&#xff0c;提升开发效率。在5月28日晚7点 OpenTiny B站直播间&#xff0c;OpenTiny 非常荣幸地为大家带来一场关于 TinyVue 组件库实战分享的直播。届时&#xff0c;TinyVue 组件库成…

openEuler系统通过shell脚本安装openGauss 5.0.0企业版

上次提到的开机自启动的配置&#xff0c;获得了LD的称赞&#xff0c;然而LD的要求&#xff0c;都是“既得陇复望蜀”的&#xff0c;他又期望我们能实现openGauss安装的“自动化”&#xff0c;于是尝试了下用shell脚本部署&#xff0c;附件中的脚本实测有效&#xff0c;openEule…

图论(二)-图的建立

引言&#xff1a; 建图&#xff0c;将图放进内存的方法 常用的建图方式&#xff1a;邻接矩阵&#xff0c;邻接链表&#xff0c;链式前向星 一、邻接矩阵 通过一个二维数组即可将图建立&#xff0c;邻接矩阵&#xff0c;考虑节点集合 &#xff0c;用一个二维数组定义邻接矩…

迭代器模式(行为型)

目录 一、前言 二、迭代器模式 三、总结 一、前言 迭代器模式(Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;提供一种方法顺序访问一个聚合对象中各个元素&#xff0c;而又不暴露该对象的内部表示。总的来说就是分离了集合对象的遍历行为&#xff0c;抽象出…

gcc -m32 一堆报错:No such file or directory

问题&#xff1a;终端执行命令gcc -m32 *.c -o xxx.so 出现一堆缺失文件的报错。 解决办法&#xff1a;库没装全&#xff0c;终端执行下面的命令。 sudo apt install gcc-multilib