qtcanpool 知 08:Docking

文章目录

  • 前言
  • 口味
  • 改造
  • 后语

前言

很久以前,作者用 Qt 仿照前端 UI 设计了一个 ministack(https://gitee.com/icanpool/qtcanpool/blob/release-1.x/src/libs/qcanpool/ministack.h) 控件,这个控件可以折叠。部分用户体验后,觉得很不错,于是问我可以进行鼠标拖拽和停靠么?就是类似 Qt 自带的 DockWidget 的效果。答案自然是不可以。
在这里插入图片描述

Qt 自带的 DockWidget 能用但不好用。
作者看了下 QMainWindow 里面提供的关于 DockWidget 的接口,以为挺简单的,是不是可以参考实现一个呢?当走进 Qt 源码的时候,才发现把事情想简单了。
在这里插入图片描述

作者不行不代表在坐的各位都不行。这不,有人就搞事情了,Qt 自带的不行,那就来个 Qt-Advanced-Docking-System(https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git),结果还干到 Qt Creator 源码里面了,不得不佩服。呐,这个就叫专业。

口味

Qt-Advanced-Docking-System(下文简称 ADS)虽然运行效果上杠杠滴,但是代码风格上与作者的口味有很大不同。比如:

  • 类定义中的声明顺序与 Qt 的完全颠倒了,声明的顺序如下。正常的应该是 public 在前面,方便用户看到对外接口,放在最下面,总要让人动动鼠标滑动屏幕。
    private
    private Q_SLOTS
    protected
    public
    public Q_SLOTS
    Q_SIGNALS
    
  • 变量名采用大驼峰命名法,类名加 C 前缀。比如定义一个类变量:CDockWidget *DockWidget。对于没有为类添加 C 前缀这种习惯的人,变量 DockWidget 容易和类名混淆,在引用的地方看起来很别扭。类私有成员类中的变量大驼峰看起来也很别扭。
  • 注释太多了,尤其是在头文件中。不注释不好,太多了也不好,对于见名知义的接口完全没必要。再加上声明顺序的问题,看起来好累。
  • 其它指针/引用操作符位置、代码块大括号位置等代码风格不做品评。

总而言之吧,不符合作者的口味。

改造

作者曾不下三次要改造这个库,只为让自己舒服一些。

本次作者抱着学习的态度,从头到尾参照 ADS 重写了一个 qxdock(https://gitee.com/icanpool/qtcanpool/tree/master/src/libs/qxdock),不像之前直接在某个版本代码上进行风格替换。代码风格上保持和 qtcanpool 中其它库一致。主要做了如下改变:

  • 类定义中的声明顺序为:
    public
    signals
    public slots
    protected slots
    private slots
    protected
    private
    
  • 变量名采用小驼峰命名法,类成员变量加 m_ 前缀,静态变量加 s_ 前缀。
  • 类名去掉 C 前缀
  • 文件名采用小写,且全用 dock 作为前缀
  • 极少注释
  • ……
    在这里插入图片描述

后语

作者是抱着学习态度改造的,改成自己的口味,一方面便于理解,另一方面便于未来的功能扩展。读者可以根据自己的口味选择。如果闲得蛋疼,也可以效仿作者去改造!

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

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

相关文章

嵌入式C编程:宏定义与typedef的深入对比与应用

目录 一、宏定义(Macro Definition) 1.1. 特点与应用 1.1.1 定义常量 1.1.2 定义函数式宏 1.1.3 条件编译 1.2. 作用范围和生命周期方面 1.3. 应用注意事项 二、typedef 2.1. 特点与应用 2.1.1 简化类型声明 2.1.2 提高代码可读性 2.1.3 实现…

如何高效写论文-学习笔记【AI算法研究猿James】

视频链接:如何高效写论文_哔哩哔哩_bilibili 视频里面广告内容较多,为便于复习回顾,现对学习内容进行记录。 目录 1、写论文总体认知 1.1、写论文到底有多重要? 1.2、写论文难在哪儿? 2、从审稿人角度看论文写作 2.1、审稿人在意的是…

使用 EasyExcel 实现高效的 Excel 读写操作

在日常开发中,Excel 文件的读写操作是一个常见的需求。EasyExcel 是阿里巴巴开源的一个高性能、易用的 Excel 读写库,可以大幅提高处理 Excel 文件的效率。它通过事件驱动模型优化了大数据量 Excel 的读写性能,非常适合处理大文件或高并发场景…

电脑插入耳机和音响,只显示一个播放设备

1. 控制面板-硬件和声音-Realtek高清音频-扬声器-设备高级设置-播放设备里选择使用前部和后部输出设备同时播放两种不同的音频流 在声音设置中就可以看到耳机播放选项

代码随想录算法训练营day49|动态规划part11

最长公共子序列 这个与上篇笔记最大的不同就是子序列里的数可以不相邻,那么只需加入一个dp[i][j]的上和左的更新方向即可 class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size()1,vector<…

JavaEE-经典多线程样例

文章目录 单例模式设计模式初步引入为何存在单例模式饿汉式单例模式饿汉式缺陷以及是否线程安全懒汉式单例模式基础懒汉式缺陷以及是否线程安全懒汉式单例模式的改进完整代码(变量volatile) 阻塞队列生产者消费者模型生产者消费者模型的案例以及优点请求与响应案例解耦合削峰填…

qt QCryptographicHash详解

1、概述 QCryptographicHash是Qt框架中提供的一个类&#xff0c;用于实现加密散列函数&#xff0c;即哈希函数。哈希函数能够将任意长度的数据转换为固定长度的哈希值&#xff0c;也称为散列值或数据指纹。这个哈希值通常用于数据的完整性校验、密码存储等场景。QCryptographi…

【数据结构】动态规划-基础篇

针对动态规划问题&#xff0c;我总结了以下5步&#xff1a; 确定dp数组以及下标的含义&#xff1b; 递推公式&#xff1b; dp数组如何初始化&#xff1b; 遍历顺序&#xff1b; 打印dp数组&#xff08;用来debug&#xff09;&#xff1b; 以上5步适用于任何动态规划问题&#x…

字符串函数和内存函数

字符串函数 1、strlcpy 【字符串拷贝】 &#xff08;将原字符串中的字符拷贝到目标字符数组中&#xff0c;包括终止符号\0&#xff0c;并在这里停止&#xff1b;为了避免越界&#xff0c;目标字符串数组应该足够大去接收&#xff09;&#x1f446; &#xff08;返回值是 dest…

Electron-vue 框架升级 Babel7 并支持electron-preload webapck 4 打包过程记录

前言 我这边一直用的electron-vue框架是基于electron 21版本的&#xff0c;electron 29版本追加了很多新功能&#xff0c;但是这些新功能对开发者不友好&#xff0c;对electron构建出来的软件&#xff0c;使用者更安全&#xff0c;所以&#xff0c;我暂时不想研究electron 29版…

模型优化与迁移学习

三大要素&#xff1a;数据、算法&#xff08;神经网络&#xff09;、算力 一、数据获取方法 数据集分类 分类数据&#xff1a;用于图像分类&#xff0c;一般是以目录形式分开 标注数据&#xff1a;用于目标检测和图像分割&#xff0c;是有标注数据的 1 开源数据集 1.PyTo…

ML 系列:第 39 节 - 估计方法:最大似然估计 (MLE)

目录 一、说明 二、什么是最大似然估计 (MLE)&#xff1f; 2.1 理解公式 2.2 MLE 的定义 2.3 我们何时使用 MLE&#xff1f; 三、结论 一、说明 在统计学领域&#xff0c;我们经常需要根据观察到的数据估计统计模型的参数。为此目的广泛使用的两种关键方法是最大似然估计 ( MLE…

文本生成类(机器翻译)系统评估

在机器翻译任务中常用评价指标&#xff1a;BLEU、ROGUE、METEOR、PPL。 这些指标的缺点&#xff1a;只能反应模型输出是否类似于测试文本。 BLUE&#xff08;Bilingual Evaluation Understudy&#xff09;&#xff1a;是用于评估模型生成的句子(candidate)和实际句子(referen…

Asp.net Mvc在VSCore中如何将增删改查的增改添加数据传输到页面(需配合上一篇Mvc的增删改查一起)

Linq集成查询&#xff08;关联Lambda&#xff09; First FirstOrDefault 找到第一个符合条件的元素 First(x >x.Id id) 返回第一个Id等于id的元素&#xff0c;如果都没有符合的&#xff0c;报错FirstOrDefault(x >x.Id id) 返回第一个Id等于id的元素&#xff0c;如果…

vue.js学习(day 19)

自定义创建项目 ESlint 代码规范 代码规范错误 手动修正 自动修正 settings.json {"emmet.triggerExpansionOnTab": true,"editor.fontSize": 25,// 当保存的时候&#xff0c;eslint自动帮我们修复错误"editor.codeActionsOnSave": {&qu…

【springboot】健康检查 监控

文章目录 1. 引言重要性 2. 配置Spring Boot ActuatorSpring Boot Actuator的角色和功能引入必要的依赖启用Actuator的健康检查端点配置安全性和可见性 3. 扩展健康检查指标创建自定义健康指示器示例&#xff1a;数据库连接健康检查示例&#xff1a;自定义缓存健康检查 4. 利用…

考研英语翻译与大小作文

名词动化词 1 持有 harbor2 2 反映 mirror 3 缩短 bridge 4 使用 harness 5 掩饰 mask/veil 6 修改 tailor 7 汇集 pool 8 控制 curb 9 想象 picture 10 激发 trigger 拉丁…

两个畸变矩阵相乘后还是一个2*2的矩阵,有四个畸变元素。1、畸变矩阵吸收了法拉第矩阵。2、畸变矩阵也给法拉第旋转角带来模糊(求解有多种可能)

角度一&#xff1b;恢复畸变的时候也把法拉第旋转恢复了 角度二&#xff1a;求解法拉第旋转角的时候 前面乘的复系数的不同也会带来法拉第旋转角和畸变的不同解 注意&#xff1a;无论多少个畸变矩阵相乘&#xff0c;结果都是2*2的矩阵&#xff0c;也就是畸变参数可以减少…

集合框架(1)

集合框架&#xff08;1&#xff09; 1、数组的特点与弊端 &#xff08;1&#xff09;特点&#xff1a; 数组初始化以后&#xff0c;长度就确定了。数组中的添加的元素是依次紧密排列的&#xff0c;有序的&#xff0c;可以重复的。数组声明的类型&#xff0c;就决定了进行元素初…

VR眼镜可视化编程:开启医疗信息系统新纪元

一、引言 随着科技的飞速发展&#xff0c;VR 可视化编程在医疗信息系统中的应用正逐渐成为医疗领域的新趋势。它不仅为医疗教育、手术培训、疼痛管理等方面带来了新的机遇&#xff0c;还在提升患者体验、推动医疗信息系统智能化等方面发挥着重要作用。 在当今医疗领域&#xf…