qtcanpool 知 08:Docking

发布于:2024-12-06 ⋅ 阅读:(124) ⋅ 点赞:(0)

文章目录

前言

很久以前,作者用 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 作为前缀
  • 极少注释
  • ……
    在这里插入图片描述

后语

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


网站公告

今日签到

点亮在社区的每一天
去签到