前言
在上一讲“主题之争”中,我们知道引入主题是为了解决原生界面“丑”的问题,机智的读者可能已经根据几种手段美化了自己的界面。这些读者可能会发现一个问题:在美化后,标题栏会显得格格不入,它不受你控制,依然保持原有的朴素。
追求极致的读者,是不能容忍这样的标题栏存在的,所以他们要想方设法的去消灭它。
解决原生标题栏不受控的问题,也是 qtcanpool 产生的一个原因。目前主流的做法是:去掉原生标题栏,重新自定义标题栏。在 Qt 中去掉标题栏是通过一个窗口标志 Qt::FramelessWindowHint 设置的,这就是“无边框”的由来。
现状
qtcanpool 中的 FancyTitleBar 是基于 FramelessHelper 演变而来的,目前网上关于 FramelessHelper 的内容铺天盖地。
读者,甚至作者都认为,还有必要专门开主题去讲吗,直接到网上找一个用就好了,而且有的资料还很全面。作者简单看了下各家的 FramelessHelper,还有改善的地方,作者除了想输出一个通用的组件,也想把这一块再进一步学习一下,所以干就完了。
计划
由于作者要整理 Qt 无边框背后的机制、学习各家 FramelessHelper 设计原理,输出通用组件等,所以短时间内还完不成该主题的讲解,敬请期待,也许是一个月,也许是一年……
目前,在 qtcanpool master 分支中,FancyTitleBar 可以较好的支持 Windows 平台原生特性(限于单屏幕/显示器),欢迎体验和完善。
最新进展如下:
- qxframeless:https://gitee.com/icanpool/qxframeless ,在 Qt 5 Windows 平台上有不错的效果
- qxwindow:https://gitee.com/icanpool/qtcanpool/tree/master/src/libs/qxwindow ,基于 qwindowkit 衍生的无边框方案,在 Qt 5/6 Windows 平台上有惊艳的效果