前言
仪表盘作为常见控件,作为Qt入门练习是一个不错的选择,文章主要记录基本思路、各种方法的作用和具体参数,以及实战中遇到的bug以及解决方法。
一、头文件
头文件扩展名为.h,包含函数声明和宏定义,编写C++程序的时候,将常量,宏,全局变量和函数原型写入头文件,方便随时调用。因此在头文件中引入需要用到的QPainter图形绘制类,QtMath通用数学函数。
头文件包含关键字如下:
paintEvent(QPaintEvent*):QWidget类中的虚函数,可以在子类中被重写来接收绘图事件,然后在指定区域完成图形的绘制。
qreal:Qt框架作为跨平台开发框架,qreal关键字与常用的double和float区别不大,使用qreal关键字的主要原因如下:
1.跨平台一致性:Qt通过使用qreal确保不同平台上数值计算的精度和性能保持一致
2.代码可读性:增加代码可读性和可维护性
3.兼容性:通过qreal定义能保证未来数值类型的兼容性
二、主文件
仪表盘由背景圆形,刻度线,指针,仪表文字四部分组成,由于组成简单,可写函数方法也可不写函数方法。
进行QPainter,Qpoint类的初始化。
QPainter painter(this)
QPoint center
主文件包含类和方法如下:
QPainter类
setRenderHints():防止图形走样,防止“锯齿”现象的出现。
具体参数意思如下:
QPainter::Antialiasing 告诉绘图引擎应该在可能的情况下进行边的反锯齿绘制
QPainter::TextAntialiasing 尽可能的情况下文字的反锯齿绘制
QPainter::`SmoothPixmapTransform` 使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算
translate():实现对坐标原点的重新定义,参数为x坐标,y坐标。
setPen():设置画笔
参数如下:
setPen(Qt::颜色, 粗细(px);
setBrush():设置画刷状态
painter.setBrush(QColor(142, 142, 142));通过QColor调整颜色,可以使用RGB或者特定颜色。
drawEllipse():绘制椭圆或圆
drawEllipse(圆心坐标点, 横向半径, 竖向半径);
rotate:实现对图形的旋转
rotate(旋转的角度,正数为顺时针方向)
drawLine():绘制一条直线
drawLine(点1坐标, 点2坐标)
restore():恢复QPainter画笔状态
drawRoundedRect():绘制圆角矩形
drawRoundedRect(rect矩形,竖边弧度,横边弧度)
drawText():在指定矩形中写入格式化文本
drawText(rect矩形, 字符串)
drawPolygon():绘制不规则多边形
drawPolygon(多边形顶点)
QPoint类
使用整数精度定义平面中的一个点
QPointF:float型 QPoint
QFontMetrics类
提供关于字体的指标信息
QRect类
使用整数精度在平面上定义一个矩形
三、实战中遇到的问题和注意事项
1.初始化类对象
QPainter painter(this);
2.下载Force utf8插件,并在需要输出的汉字前加入u8申明。
QString title = u8"仪表盘";