Qt示例 | 基本图型的绘制
示例运行效果:
该示例提供了一个渲染区域,显示当前活动的形状,使用QPainter参数操作渲染形状及其外观:可以改变活动形状(形状),并修改QPainter的钢笔(钢笔宽度,钢笔样式,钢笔帽,钢笔连接),画笔(画笔样式)和渲染提示(抗锯齿)。此外,可以旋转形状(转换)。
文件目录:
主要包含一个渲染区域的类RenderArea和一个主窗体window类。还包含了两个图片资源。
具体实现:
main函数:
main函数主要将主窗体显示出来。
Window类:
Window类继承了QWidget,它是应用程序的主窗口,除了显示几个参数小部件外,还显示一个RenderArea小部件。
Window类中除了定义了小部件的变量,还包括一个构造函数和三个私有的槽函数。
- 当改变当前活动的形状时,shapeChanged()槽会更新RenderArea中的小部件。
- 当QPainter的钢笔参数发生变化时,会调用penChanged()槽。
- 当改变画笔样式时,brushChanged()槽会更新RenderArea小部件。
构造函数:
在构造函数中,创建并初始化了出现在主应用程序窗口中的各种小部件。
这里创建了视图区域和形状选择下拉框。并填充了下拉框的选项。
setBuddy: 将这个标签的好友设置为指定部件。好友机制仅适用于包含一个字符以’&'作为前缀的文本的QLabels。按下“Alt+S”组合键时,焦点就会到shapeComboBox上面去。
这里为Pen Width参数创建一个QSpinBox部件用于选择画笔的宽度。
- QPainter的画笔是一个QPen对象;
- QPen类定义了QPainter应该如何绘制图形的线条和轮廓。
- QPen有几个属性:宽度、样式、笔帽和连接。
- QPen的宽度可以为零或更大,但最常见的宽度为零。请注意,这并不意味着0像素。
创建了选择钢笔样式类型、笔帽类型、笔连接类型等下拉选择框。默认样式是solid (Qt::SolidLine)。设置样式为none (Qt::NoPen)告诉QPainter不要画线或轮廓。
- 笔帽定义如何绘制直线的端点。
- 笔连接定义了当绘制多条连接线时两条线如何连接。
- 笔帽和连接仅适用于宽度为1像素或更大的线。
为画笔样式参数创建一个QComboBox,并添加相关的项(即Qt::BrushStyle enum的值)。
QBrush类定义了由QPainter绘制的形状填充模式。默认的笔刷样式是Qt::NoBrush。这个样式告诉QPainter不进行填充。填充的标准样式是Qt::SolidPattern。
抗锯齿是一个“平滑”的像素,以创建更多的均匀和不参差不齐的线条,可以使用QPainter的渲染提示应用。QPainter::RenderHints被用来指定QPainter的标志。
转换选项意味着对坐标系统的操作,它将显示为呈现的形状在三维空间中旋转。
这里创建一个抗锯齿选项的QCheckBox。
完成信号槽的连接。确保当用户改变形状或任何其他参数时,RenderArea小部件会被更新。
完成页面的布局。
完成页面的初始化。设置窗口的标题,调用shapeChanged()、penChanged()和brushChanged()槽来初始化应用程序。我们还打开了抗锯齿。
Window类:
shapeChanged函数:
每当点击shape的下拉框选项时会更改当前活动的形状,将调用shapeChanged()槽。
QComboBox::itemData()函数可以检索用户选择的形状。
这个函数返回组合框中给定索引中给定角色的数据。
使用QComboBox::currentIndex()来检索形状的索引,角色由Qt::ItemDataRole enum定义;IdRole是Qt::UserRole的别名。
penChanged函数:
每当更改pen参数时,都会调用penChanged()槽。
使用QComboBox::itemData()函数来获取参数,然后调用RenderArea::setPen()槽来更新RenderArea小部件。
brushChanged函数:
每当更改画笔选项时,调用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小部件。
- 点赞
- 收藏
- 关注作者
评论(0)