需求背景
现在移动端各种app以及PC 浏览器,都实现了圆角化,为了迎合大众的喜好,导致其他行业场景也出现了这种需求,多标签页是一个使用较多的控件,qt提供的qss以及quick所实现不能完全满足项目要求,对于工程师来讲,仅仅使用官方给出基本接口,是不够用。
问题分析
1、基本控件需要tabbar、stackwidget
2、难点分析圆角处理两侧tabbutton、选中状态的tabbutton、stackwidget描边(凸形)
3、单纯的画矩形圆角是不能实现这种效果的
4、tabbutton和stackwidget显然是作为一个整体进行绘制的,想通过拼接也是实现不了的
实现步骤
凸形绘制
作为tabwidget的背景进行绘制,tabbutton和stackwidget的rect可以获得,qwidget使用painterpath描路径,qml使用canvas画布,圆角使用2阶贝塞尔曲线处理,第一个和最后一个做特殊处理,设置边框颜色和填充颜色。
TabButton绘制
首先tabbar控件背景设为透明,tabbutton设置为圆角矩形,checked状态是白色见图,与stack接触的底部需在tabwidget背景里绘制,实际是一个叠加效果。
实现效果