12_绘制系统.md

Qt绘制系统

目录

​ Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于 QPainter,QPainterDevice 和 QPaintEngine 三个类。

  • QPainter: 来执行绘制操作
  • QPainterDevice: 是一个二维空间的抽象,这个二维空间允许QPainter 在其上面进行绘制,也就是 QPainter 工作的空间。
  • QPainterEngine: 提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口。QPaintEngine 类应用于 QPainter和 QPaintDevice 之间,通常对开发人员是透明的。除非你需要自定义一个设备,否则你是不需要关心 QPaintEngine 这个类的。
#include "paintedwidget.h"

#include <QPainter>
#include <QPaintEvent>

PaintedWidget::PaintedWidget(QWidget *parent):QWidget(parent)
{
    setFixedSize(600, 400);
    setWindowTitle("Paint");
}

void PaintedWidget::paintEvent(QPaintEvent *) {
    QPainter painter(this);
    painter.drawLine(80, 100, 650, 500);
    painter.setPen(Qt::red);
    painter.drawRect(10, 10, 100, 400);
    painter.setPen(QPen(Qt::green, 5));
    painter.setBrush(Qt::blue);
    painter.drawEllipse(50, 150, 400, 200);
}

12_绘制系统.md

​ QPainter 接收一个 QPaintDevice 指针作为参数。QPaintDevice 有很多子类,比如 QImage,以及 QWidget。注意回忆一下,QPaintDevice 可以理解成要在哪里去绘制,而现在我们希望画在这个组件,因此传入的是 this 指针。

#include "paintedwidget.h"

#include <stdio.h>
#include <QPainter>
#include <QPaintEvent>
#include <QMouseEvent>
#include <QWheelEvent>

PaintedWidget::PaintedWidget(QWidget *parent):QWidget(parent)
{
    // setFixedSize(600, 400);
    setWindowTitle("Paint");
}

void PaintedWidget::paintEvent(QPaintEvent *) {
    QPainter *painter = new QPainter(this);
    painter->drawEllipse(x-r/2, y-r/2, r, r);
    delete painter;
}

void PaintedWidget::wheelEvent(QWheelEvent *event) {
    QPoint degree = event->angleDelta();
    if (degree.y() > 0) {
        r++;
    } else {
        r--;
    }
    if (r <= 0) {
        r = 0;
    }
    x = event->position().x();
    y = event->position().y();
    this->update();
}

12_绘制系统.md

上一篇:Qt5加载SVG格式的图片并更颜色


下一篇:Java并发编程实战 之 线程安全性