01 Qt自定义风格控件的基本原则

              目录

1.继承原生控件

2.组合原生控件

3.仿写原生控件

PS:后续将继续分享开发实践中各类自定义控件的方法、思路以及组件库


1.继承原生控件

关键字:继承、paintEvent

    这里想说的是,Qt的Gui框架在封装原生控件的同时, 也为开发者提供了各种虚接口函数。如果Qt原生控件+QSS样式表的组合满足不了业务开发的风格需要时, 那么继承Qt原生控件、重写绘制关联虚接口函数一定是我封装控件的第一选择。

比如:下面虚线风格的滑动条

图1-1

Qt原生风格的QSlider显然不可能达到该效果,那么继承QSlider类,然后重写虚函数QSlider::paintEvent,分别绘制groove、刻度线、进度以及滑块,就可以实现目标效果!

    这里为什么要刻意强调继承原生控件呢?因为,继承了原生控件,你才能保持控件的基本功能接口的有效复用,而在paintEvent中,无论做什么绘制,都依赖于各个接口的返回结果(比如:滑动条的进度值)。当然,并不是所有的绘制都是简单的一个虚函数paintEvent可以搞定的,这个要具体问题具体分析!

2.组合原生控件

关键字:组合、布局

    这里所说的组合原生控件是指:在原生控件的基础上布局新的子控件,以满足业务需求、实现新的自定义风格的控件。

举个例子:下图所示的带按钮的编辑框非常常见

2-1 图2-1

而QLineEdit类显然不具备上述按钮功能,那么遵循该原则的实现思路就是:能否把一个按钮QPushButton布局在QLineEdit的右边,两个父子控件组合在一起的话是不是就达到了预期的效果了呢? 显然是可以的!

当然,上述控件的实现思路很多,每个开发者都会有自己的独特视角!

3.仿写原生控件

仿写原生控件当然是代价最高的一种自定义风格控件的实现方式!

这意味着,开发者要重新造轮子,根据目标效果另起炉灶、完全重写一个新的控件类。

比如,下图展示的时间选择控件:

01 Qt自定义风格控件的基本原则_第1张图片 图3-1

 显然,这个时间选择组件,由两部分组成,首先是一个可编辑时间的编辑框,其次,当点击时间值后,会在下面显示时间选择Popup弹窗。而且每一个子控件都是需要重新实现的新风格组件。

所以第三种情形下,就要开发者无所不用其极的实现渲染效果以及预期业务功能接口了。

PS:后续将继续分享开发实践中各类自定义控件的方法、思路以及组件库

你可能感兴趣的:(Qt-GUI:自定义组件的思路,qt)