Qt示例 | 基本图型的绘制 Basic Drawing Example(二)

167 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

注:示例为Qt 5.1.1中的示例。
本文旨在剖析Qt示例的源码,总结函数使用方法以及编程思想,提高自己的编程能力。

示例运行效果:

1.gif

文件目录:

image.png

具体实现:

Window类:

shapeChanged函数:

image.png

每当点击shape的下拉框选项时会更改当前活动的形状,将调用shapeChanged()槽。 QComboBox::itemData()函数可以检索用户选择的形状。
这个函数返回组合框中给定索引中给定角色的数据。
使用QComboBox::currentIndex()来检索形状的索引,角色由Qt::ItemDataRole enum定义;IdRole是Qt::UserRole的别名。

penChanged函数:

image.png

每当更改pen参数时,都会调用penChanged()槽。
使用QComboBox::itemData()函数来获取参数,然后调用RenderArea::setPen()槽来更新RenderArea小部件。

brushChanged函数:

image.png

每当更改画笔选项时,调用QComboBox::itemData()函数检索的画笔参数,就会调用brushChanged()插槽。

  • 如果刷参数是渐变填充,需要特殊的操作。QGradient类与QBrush类结合使用来指定梯度填充。 Qt目前支持三种类型的梯度填充:线性、径向和锥形。每一个都由一个子类的QGradient表示:QLinearGradient, QRadialGradient和QConicalGradient。
  • 所以如果画笔样式是Qt::LinearGradientPattern,首先创建一个QLinearGradient对象,在作为参数传递给构造函数的坐标之间有插值区域。位置是使用逻辑坐标指定的。然后使用QGradient::setColorAt()函数设置渐变的颜色。颜色是使用由位置(在0和1之间)和QColor组成的停止点来定义的。停止点的集合描述了应该如何填充梯度区域。一个梯度可以有任意数量的停止点。
  • 最后,调用RenderArea::setBrush()槽来用QLinearGradient对象更新RenderArea小部件的画笔。 类似于QLinearGradient所使用的动作模式,也被用于Qt::RadialGradientPattern和Qt::ConicalGradientPattern。唯一的区别是传递给构造函数的参数:对于QRadialGradient构造函数,第一个参数是中心,第二个参数是径向梯度的半径。第三个参数是可选的,但可以用来定义圆内渐变的焦点(默认焦点是圆的中心)。对于QConicalGradient构造函数,第一个参数指定圆锥体的中心,第二个参数指定插值的起始角度。
  • 如果笔刷样式是Qt::TexturePattern,我们从QPixmap创建一个QBrush。然后调用RenderArea::setBrush()槽来用新创建的画笔更新RenderArea小部件。否则,简单地用给定的样式和绿色创建一个笔刷,然后调用RenderArea::setBrush()槽来用新创建的笔刷更新RenderArea小部件。

未完待续...