首页 > 其他 > 详细

12_绘制系统.md

时间:2021-02-09 12:14:28      阅读:16      评论:0      收藏:0      [点我收藏+]

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);
}

技术分享图片

? 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

原文:https://www.cnblogs.com/nsfoxer/p/14391937.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!