28.QT-QPainter介绍
介绍
- 可以在QPaintDevice类上绘制各种图形
- QPaintDevice类表示QPainter的绘图设备(画布)
- QpaintDevice子类有QImage、QOpenGLPaintDevice、QWidget 等
- 所以, QPainter可以在QImage、QOpenGLPaintDevice、QWidget上进行绘制图形
- QPainter只能在类对象的paintEvent()函数中绘制图形
QPainter类的成员角色有:
- QPen : 用于绘制几何图形的边缘,由颜色,宽度,线风格等参数组成
- QBrush : 用于填充几何图形的调色板,由颜色和填充风格组成
- QFont : 用于文本绘制
- QPixmap : 绘制图片,可以加速显示,带有屏幕截图,窗口截图等支持,适合小图片
- QImage : 绘制图片,可以直接读取图像文件进行像素访问,适合大图片
- QBitmap : QPixmap的一个子类,主要用于显示单色位图
- QPicture : 绘图装置,用于记录和重播Qpainter的绘图指令
具体参考: https://blog.csdn.net/cloud_castle/article/details/26256663
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201806/1182576-20180620150340596-228859582.png">
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201806/1182576-20180620150355271-225418892.png">
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201806/1182576-20180620150411879-1303897264.png">
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201806/1182576-20180620150418643-420211971.png">
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201806/1182576-20180620150425562-1236341978.png">
QPainter-视口/窗口
在Qt中, QPainter可以通过视口和窗口来设置自身组件大小位置.
视口: 基于QPaintDevice类组件的坐标实现的,属于物理坐标,通过setViewport成员函数设置
窗口: 基于自身的逻辑坐标实现的,并不是真实坐标,可以通过setWindow成员函数设置
需要注意的是:
- Qpainter的坐标是使用的窗口坐标(逻辑坐标)
- 当QPainter初始化时,视口和窗口坐标默认是相同的,也就是说原点(0,0)在于窗口左上角
- 所以视口和窗口的最小坐标和最大坐标是从左上到右下的.
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201806/1182576-20180620150451333-1179916775.png">
由于数学Y坐标方向与屏幕Y坐标方向是相反的,所以w保持不变,h=-height
所以对应代码为:
效果如下:
<span "="" src="https://images2018.cnblogs.com/blog/1182576/201806/1182576-20180620150521423-38524211.png">
Qpainter通过drawText来绘制文本
绘制文本时,是以左下角为原点开始的.
可以通过QfontMetrics获取字符串在指定字体下的宽度和高度.
示例:
效果:
未完,下章学习: 30.QT-渐变之QLinearGradient、 QConicalGradient、QRadialGradient