持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
注:示例为Qt 5.1.1中的示例。
本文旨在剖析Qt示例的源码,总结函数使用方法以及编程思想,提高自己的编程能力。
示例运行效果:
文件目录:
具体实现:
ArthurStyle类:
drawComplexControl函数:
这个函数是用来实现复杂控件的绘制的,我们这里主要用来绘制两个小部件,一个是滚动条,一个是Combox。复杂控件是指它上面会包含很多行为,如确定点击位置和按下的按键等。
- 滚动条部件: 首先获取滑块和滑块可以滑动的凹槽(groove)的区域。判断hover状态,如果是hover状态,绘制它的hover的效果(绿色底色,范围是本身的大小上下各缩小4个像素)。然后分别绘制了滑块和凹槽的样式。
- GroupBox部件: 首先获取到GroupBox的标题框,绘制标题框的背景,然后绘制标题框中的文字。
QStyleOptionGroupBox: 类用来表示GroupBox的参数。
translated: 返回一个矩形的副本,该矩形相对于当前位置在x轴上平移dx,在y轴上平移dy。正值代表将矩形向右和向下移动。
drawControl函数:
这个函数用来绘制一些控制类部件,控件类部件是执行某些操作或向用户显示信息的小部件的一部分。这里主要实现了对RadioButton和PushButton的自定义绘制。
- RadioButton: 这里主要实现对RadioButton中文字的绘制。设置了文字颜色、对齐方式、显示区域等。\
- PushButton: 这里主要也是对PushButton中的文字进行了特殊绘制。文字颜色为黑色,水平垂直居中。
subControlRect函数:
这个函数主要用来实现对子控件的绘制,子控件属于复杂控件的一部分。这里主要实现了对GroupBox的绘制。包括对GroupBox的内容、边框和标题栏的绘制。还有对滚动条的绘制。设置了滚动条中滑块的宽高和凹槽的高度跟位置。
sizeFromContents函数:
这个函数主要实现根据元素的类型和选项以及指定的大小,返回一个新的大小(根据小部件本身的大小为小部件设置一个新的大小)。这里返回了RadioButton、PushButton、Slider的大小。
QCommonStyle::sizeFromContents: 根据提供的第三个参数(contentsSize)返回指定选项(option)和类型(type)所描述的元素(element)的大小。
pixelMetric函数:
这里是用来获取指定小部件的像素值的,这里获取了Slidr的高度值。
pixelMetric: 此描述各种可用的像素度量。像素度量是由单个像素值表示的与样式相关的大小。
polish函数:
这个函数用来初始化给定小部件的外观。在每个小部件完全创建之后的某个时刻,在它第一次显示之前,都会调用这个函数。
unpolish函数:
这个函数是用来取消初始化给定小部件的外观的。这个函数是polish()的对应函数。每当样式被动态更改时,它会为每个抛光小部件调用;前一种样式必须在新样式可以再次润色它们之前对其设置进行润色。
polish函数:
这个函数是根据调色板的特定样式要求(如果有的话)更改调色板。和上面的polish函数类似,只不过参数不同,操作的对象不同。
subElementRect函数:
这个函数返回给定元素的子区域,如所提供的样式选项所述。返回的矩形在屏幕坐标中的位置。可以在函数中对原始区域更改并返回新的区域。
未完待续...