持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
注:示例为Qt 5.1.1中的示例。
本文旨在剖析Qt示例的源码,总结函数使用方法以及编程思想,提高自己的编程能力。
简单了解仿射变换
仿射变换(Affine Transformation)其实就是另外两种简单变换的叠加:一个是线性变换,一个是平移变换。
仿射变换变化包括缩放(scale)、平移(transform)、旋转(rotate)、反射(reflection,镜面效果)、剪切(shear mapping,类似于实现一个图形的影子)。
示例运行效果:
该示例实现了使用QPainter绘制不同类型的图形,并实现图形的仿射变换。包括矢量图形、图片和文本(文本支持自定义输入)。
- 可以拖动绘图中心的红色圆圈将其移动到一个新位置。
- 可以拖动旁边的红色圆圈使当前绘图围绕中心圆圈旋转。也可以拖动Rotate滑块控制旋转。
- 可以拖动Scale滑块控制缩放。
- 可以拖动Shear滑块实现剪切变换。
- 其他功能有:重置图形、动态展示、显示源程序、使用OpenGL绘制、说明等。
文件目录:
为了提高程序的可扩展性,或者项目比较大需要多人参与项目开发时有会有很多.h和.cpp文件,管理起来比较繁琐。这时就需要用到.pri文件,将项目中某一部分功能需要的相关文件单独存放在一个文件夹中,.pri文件中保存的就是这部分中的文件目录信息。
示例中就用到了shared子项目。可以看到在项目文件目录中有一个shared文件夹,打开后可以看到里面包括一个.pri文件和其他的一些.h、.cpp和资源文件。
如何使用.pri文件:
如果想要添加一个新的子目录:
- 右击项目,选择添加新文件...。
- 选择“General”-->"Empty File",然后点击choose。
- 编辑名称和路径。
- 将新添加的文件后缀名改为.pri。
- 打开项目的.pro文件,将.pri文件include进来(手动写入,注意.pri文件的路径)。
- 重新运行项目,这时子目录的文件夹(shared)就创建出来了。
- 这时你可以通过选中子目录右键新建、添加,或者直接拖拽的方式将文件添加到子目录中。
如果想将一个现有的项目添加到项目中:
- 把现有项目放到新项目的目录中。
- 将现有项目的.pro文件的后缀名改为.pri。
- 右击新项目,选择添加现有文件,选择现有项目的.pri文件。
- 在新项目的.pro文件中将.pri文件include进来(手动输入)。
- 重新运行即可。 注: 这里要注意文件的路径问题,一个是要注意include .pri文件时的路径,一个是要注意现有项目.pri文件中的文件路径。需要在文件名前面加上"$$PWD/"表示当前路径,或者指定自定义路径。
具体实现:
main函数:
main函数主要用来创建主窗口,并为主窗口及主窗口内的所有子窗口设置GUI样式。
Q_INIT_RESOURCE: Q_INIT_RESOURCE是Qt的资源机制。
Qt资源系统是一种独立于平台的机制,用于在应用程序的可执行文件中存储二进制文件。
如果你的应用程序总是需要一组特定的文件(图标、翻译文件等),并且你不想冒丢失文件的风险,就加上这句代码,参数为资源文件名。
程序在编译时将资源存储在.cpp文件中,运行时连接它。
Qt::WA_AcceptTouchEvent: 允许小部件接收触摸事件(QTouchEvent)。必须在所有想要处理触摸事件的小部件上设置。如果没有设置此属性,来自触摸设备的事件将作为鼠标事件发送。
未完待续...