QPainter绘图

来源:互联网 发布:马加爵事件完整版 知乎 编辑:程序博客网 时间:2024/05/22 05:20

QPainter可以画在"绘图设备"上,例如QWidget、QPixmap、QImage或者QSvgGenerator。 QPainter也可以与QPrinter一起使用来打印文件和创建PDF文档。


要想在绘图设备(一般是窗口部件)上绘图,只需重新实现QWidget: : paintEvent(),创建一个QPainter,再将指针传到该设备中。
例如:

void MyWidget::paintEvent(QPaintEvent *event){QPainter painter{this);painter.drawLine(0, 0, 100, 100); // 画直线}

主要通过调用painter.setPen()、painter.setrush()和painter.setFont()修改绘制效果。

设置painter.setRenderHint(QPainter::Antialiasing, true)可以启用反走样,它会告诉QPainter用不同的颜色强度绘制边框以减少视觉扭曲,这种扭曲一般会在边框转换为像素的时候发生。由此生成的结果是可以在支持这一特性的平台和设备上得到平滑的边缘,需要在draw的前面调用。

在QPainter的默认坐标系中,点(0, 0)位于绘图设备的左主角,X坐标向右增长,y坐标向下增长。默认坐标系的每个像素占1 x 1大小的区域。
理论上,像素的中心取决于半像素坐标。例如,窗口部件的左上角像素覆盖了点(0, 0)到点
(1, 1)的区域,它的中心在(0.5, 0.5)位置。如果告诉QPainter 绘制一个像素,例如(100, 100),它会相应地在两个方向做+0.5的偏移,使得像素点的中心位置在(100.5, 100.5)。
这一差别初看起来理论性很强,但它在实践中却很重要。首先,只有当反走样无效时(默认情况)才偏移+0.5; 如果反走样有效,并且我们试图在(100, 100)的位置绘制一个黑色的像素,实际上QPainter会为(99.5, 99.5)、(99.5, 100.5)、(100.5, 99.5)和(100.5, 100.5)四个像素点着浅灰色,给人的印象是一个像素正好位于四个像素的重合处。如果不需要这种效果,可以通过指定半像素坐标或者通过偏移QPainter( +0.5, +0 .5)来避免这种效果的出现。



0 0
原创粉丝点击