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

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.lryc.cn/news/500303.html

相关文章:

  • Milvus向量数据库01-基础概念
  • mysql备份数据库
  • NLP与LLM的工程化实践与学习思考 - 写在开头
  • LeetCode322. 零钱兑换(2024冬季每日一题 28)
  • Unix、GNU、BSD 风格中 ps 参数的区别
  • 单片机读写内部flash实现断电数据存储
  • 注意力机制介绍
  • 爬虫运行后数据如何存储?
  • C# 自动自定义截图的内容
  • Java的Stream流:文件处理、排序与串并行流的全面指南
  • [Maven]下载安装、使用与简介
  • 056 WXML+ WXSS+PHP+LW+校园配送商城微信小程序开发与设计 源码 文档 全套资料
  • Python 在同一/或不同PPT文档之间复制幻灯片
  • C#生成CSR(CertificateSigningRequest)和密钥
  • Docker 安装 Oracle创建表空间并导入数据库
  • elementui table子级tree懒加载bug
  • AI与低代码技术融合:如何加速企业智能化应用开发?
  • 【C#】新建窗体文件,Form、UserControl
  • ansible学习笔记之02command模块与shell模块
  • 在Docker中部署禅道,亲测可用
  • C++(十二)
  • 【数学建模】线性规划问题及Matlab求解
  • 【JavaWeb后端学习笔记】Spring全局异常处理器
  • PT8M2102 触控型 8Bit MCU
  • 4. React 性能优化技巧:如何让你的应用更快
  • pytest中使用conftest做测试前置和参数化
  • Spring Boot 中使用 @Transactional 注解配置事务管理
  • MATLAB 建筑顶面面积计算(95)
  • Linux网络编程之---组播和广播
  • Apache Dolphinscheduler可视化 DAG 工作流任务调度系统