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

218 阅读3分钟

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

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

示例运行效果:

1.gif

该示例提供了一个渲染区域,显示当前活动的形状,使用QPainter参数操作渲染形状及其外观:可以改变活动形状(形状),并修改QPainter的钢笔(钢笔宽度,钢笔样式,钢笔帽,钢笔连接),画笔(画笔样式)和渲染提示(抗锯齿)。此外,可以旋转形状(转换)。

文件目录:

image.png

主要包含一个渲染区域的类RenderArea和一个主窗体window类。还包含了两个图片资源。

具体实现:

main函数:

image.png

main函数主要将主窗体显示出来。

Window类:

image.png

Window类继承了QWidget,它是应用程序的主窗口,除了显示几个参数小部件外,还显示一个RenderArea小部件。
Window类中除了定义了小部件的变量,还包括一个构造函数和三个私有的槽函数。

  • 当改变当前活动的形状时,shapeChanged()槽会更新RenderArea中的小部件。
  • 当QPainter的钢笔参数发生变化时,会调用penChanged()槽。
  • 当改变画笔样式时,brushChanged()槽会更新RenderArea小部件。

构造函数:

在构造函数中,创建并初始化了出现在主应用程序窗口中的各种小部件。

image.png

这里创建了视图区域和形状选择下拉框。并填充了下拉框的选项。

setBuddy: 将这个标签的好友设置为指定部件。好友机制仅适用于包含一个字符以'&'作为前缀的文本的QLabels。按下“Alt+S”组合键时,焦点就会到shapeComboBox上面去。

image.png

这里为Pen Width参数创建一个QSpinBox部件用于选择画笔的宽度。

  • QPainter的画笔是一个QPen对象;
  • QPen类定义了QPainter应该如何绘制图形的线条和轮廓。
  • QPen有几个属性:宽度、样式、笔帽和连接。
  • QPen的宽度可以为零或更大,但最常见的宽度为零。请注意,这并不意味着0像素。

image.png

创建了选择钢笔样式类型、笔帽类型、笔连接类型等下拉选择框。默认样式是solid (Qt::SolidLine)。设置样式为none (Qt::NoPen)告诉QPainter不要画线或轮廓。

  • 笔帽定义如何绘制直线的端点。
  • 笔连接定义了当绘制多条连接线时两条线如何连接。
  • 笔帽和连接仅适用于宽度为1像素或更大的线。

image.png

为画笔样式参数创建一个QComboBox,并添加相关的项(即Qt::BrushStyle enum的值)。
QBrush类定义了由QPainter绘制的形状填充模式。默认的笔刷样式是Qt::NoBrush。这个样式告诉QPainter不进行填充。填充的标准样式是Qt::SolidPattern。

image.png

抗锯齿是一个“平滑”的像素,以创建更多的均匀和不参差不齐的线条,可以使用QPainter的渲染提示应用。QPainter::RenderHints被用来指定QPainter的标志。
转换选项意味着对坐标系统的操作,它将显示为呈现的形状在三维空间中旋转。
这里创建一个抗锯齿选项的QCheckBox。

image.png

完成信号槽的连接。确保当用户改变形状或任何其他参数时,RenderArea小部件会被更新。

image.png

完成页面的布局。

image.png

完成页面的初始化。设置窗口的标题,调用shapeChanged()、penChanged()和brushChanged()槽来初始化应用程序。我们还打开了抗锯齿。

未完待续...