持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情
注:示例为Qt 5.1.1中的示例。
本文旨在剖析Qt示例的源码,总结函数使用方法以及编程思想,提高自己的编程能力。
示例运行效果:
文件目录:
具体实现:
RenderArea类:
RenderArea类继承了QWidget,并使用QPainter渲染当前活动形状的多个副本。
首先,定义了一个公共的Shape枚举来保存小部件可以呈现的不同形状(即可以通过QPainter呈现的形状)。
然后重新实现构造函数以及QWidget的两个公共函数:minimumSizeHint()和sizeHint()。
还重新实现了QWidget::paintEvent()函数,以便能够根据指定的参数绘制当前活动的形状。
声明了几个私有的槽函数:setShape()改变RenderArea的形状;setPen()和setBrush()修改小部件的钢笔和画笔,setAntialiased()和setTransformed()修改小部件各自的属性。
构造函数:
- 构造函数主要进行初始化小部件的一些变量。
- 初始化它的形状为Polygon,它的抗锯齿属性设置为false,并将图像加载到小部件的pixmap变量中。最后,设置小部件的背景颜色,从小部件的调色板定义画笔,该画笔将用于呈现背景为白色。
minimumSizeHint函数:
- RenderArea继承了QWidget的minimumSizeHint属性,保存了小部件的建议最小大小。如果此属性的值为无效大小,则不建议设置大小。
- 如果小部件没有布局,QWidget::minimumSizeHint()的默认实现将返回无效的大小,否则将返回布局的最小大小。
- 函数的重新实现将返回一个宽度为100像素、高度为100像素的QSize。
sizeHint函数:
- RenderArea继承了QWidget的sizeHint属性,保存了小部件的推荐大小。如果此属性的值为无效大小,则不建议设置大小。
- 如果小部件没有布局,QWidget::sizeHint()函数的默认实现将返回无效的大小,否则将返回布局的首选大小。
- 函数的重新实现将返回一个宽度为400像素、高度为200像素的QSize。
设置形状、画笔、笔刷函数:
setShape(), setPen()和setBrush()槽函数在每当想要修改RenderArea部件的形状,钢笔或笔刷时进行调用。根据槽参数设置形状,钢笔或画笔,并调用QWidget::update()使改变后的图形在RenderArea小部件中可见。
注: QWidget::update()不会导致立即重绘;而是当Qt返回到主事件循环时,才会进行一个paint事件处理。
未完待续...