Qt学习基础之绘图事件#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPaintEvent> namespace Ui

本文介绍了Qt中的QPainter绘图基础,包括绘图事件、画线、圆、矩形和文字,以及高级设置如抗锯齿和状态管理。同时,讲解了如何手动调用绘图事件,并探讨了QPainter与绘图设备的关系,如QPixmap、QBitmap、QImage和QPicture的特性与用途。
摘要由CSDN通过智能技术生成

一、QPainter绘图 

  1. 绘图事件 void paintEvent()
  2. 声明一个画家对象 QPainter painter(this) this 指定绘图设备
  3. 画线、画圆、画矩形、画文字
  4. 设置画笔 QPen  设置画笔宽度、风格
  5. 设置画刷 QBrush 设置画刷 风格
//实例化画家对象 this指定的是绘图设备
    QPainter painter(this);

    //设置画笔
    QPen pen(QColor(255,0,0));
    pen.setWidth(3);
    pen.setStyle(Qt::DotLine);
    painter.setPen(pen);

    //设置画刷
    QBrush brush(Qt::cyan);
    //让画家使用画刷
    brush.setStyle(Qt::Dense1Pattern);
    painter.setBrush(brush);

    //画线
    painter.drawLine(QPoint(0,0),QPoint(100,100));
    //画圆
    painter.drawEllipse(QPoint(100,100),50,50);
    //画矩形
    painter.drawRect(QRect(20,20,50,50));

    //画文字
    painter.drawText(QRect(10,200,150,50),"好好学习,天天向上");

二、QPainter高级设置

  1. 抗锯齿 效率低
  2. painter.setRenderHint(QPainter::Antialiasing);
  3. 对画家进行移动
    painter.translate(100,0);
  4.  保存状态 save
画出GraphItem类的UML类图: #ifndef GRAPHITEM_H #define GRAPHITEM_H #include <QGraphicsItem> #include <QVector> #include <QPointF> #include <QtMath> #include <QTimer> #include <QPaintEvent> #include <QPushButton> #include "mainwindow.h" #include <QObject> class MainWindow; // 前向声明 class GraphItem : public QGraphicsItem { public: //构造函数,接受带权无向图临界矩阵adjMatrix和一个parent GraphItem(const QVector<QVector<int>> &adjMatrix, const QVector<int> &shortestPath, QGraphicsItem *parent = nullptr); //纯虚函数,在.cpp中重新编写以实现图形项的边界框绘制 QRectF boundingRect() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; QVector<QPointF> m_nodePositions;//存储节点的位置信息 QVector<int> m_shortestPath; // 最短路径 QVector<int> m_userCity; QVector<int> m_userSchool; bool m_drawArrow; // 是否需要绘制箭头 bool m_draw1; bool m_draw2; bool m_draw3; private: MainWindow * m_mainWindow; // 指向MainWindow对象的指针 QVector<QVector<int>> m_adjMatrix;//存储带权无向图的邻接矩阵 QPointF startPoint; QPointF endPoint; QPainter * m_painter; QPainter * m_drawNodes; void initializeNodePositions();//初始化节点位置信息 void drawEdges(QPainter * painter);//用于绘制边 void drawNodes1(QPainter * painter);//用于绘制节点 void drawNodes2(QPainter * painter);//用于绘制节点 void drawNodes3(QPainter * painter);//用于绘制节点 void paintArrow(QPainter * painter); }; #endif // GRAPHITEM_H
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值