qt QPainter详解

1. 概述

QPainter类是Qt框架中用于在窗口或图像上进行绘制的核心类。它提供了丰富的绘图功能,包括绘制线条、形状、图像、文本以及复杂的图形路径等。QPainter可以与QWidget、QPixmap、QBitmap、QImage等绘制目标(也称为设备上下文或画布)结合使用,以在其上进行绘制操作。通过QPainter,开发者可以创建丰富的用户界面和图形效果。

2. 重要方法

QPainter类提供了大量的方法来执行各种绘制任务。以下是一些重要的方法:

  • 绘制基本形状

    • void drawLine(const QLine &line): 绘制一条直线。
    • void drawRect(const QRect &rect): 绘制一个矩形。
    • void drawEllipse(const QRect &rect): 绘制一个椭圆。
    • void drawPixmap(const QPoint &position, const QPixmap &pixmap): 绘制一个QPixmap图像。
    • void drawImage(const QRect &targetRect, const QImage &image, const QRect &sourceRect = QRect(), Qt::ImageConversionFlags flags = Qt::AutoColor): 绘制一个QImage图像。
  • 绘制文本

    • void drawText(const QPoint &position, const QString &text): 在指定位置绘制文本。
    • void drawText(const QRect &rect, int flags, const QString &text, QRect *boundingRect = nullptr): 在矩形区域内绘制文本,并可以指定对齐方式等。
  • 设置绘制属性

    • void setPen(const QPen &pen): 设置绘制线条的笔刷。
    • void setBrush(const QBrush &brush): 设置填充形状的画刷。
    • void setFont(const QFont &font): 设置绘制文本的字体。
  • 其他重要方法

    • void save(): 保存当前QPainter的状态,以便稍后恢复。

    • void restore(): 恢复之前保存的QPainter状态。

    • void translate(qreal dx, qreal dy): 移动坐标系的原点。

    • void scale(qreal sx, qreal sy): 缩放坐标系。

    • void rotate(qreal angle): 旋转坐标系。

      #include <QApplication>
      #include <QMainWindow>
      #include <QWidget>
      #include <QPainter>
      #include <QPen>
      #include <QBrush>

      class PaintDemoWidget : public QWidget
      {
      protected:
      void paintEvent(QPaintEvent *event) override
      {
      QPainter painter(this);

      复制代码
          // 绘制线条
          QPen pen(Qt::black, 2); // 黑色画笔,线宽为2
          painter.setPen(pen);
          painter.drawLine(10, 10, 200, 10);
      
          // 绘制矩形
          pen.setColor(Qt::red);
          painter.setPen(pen);
          painter.setBrush(Qt::green); // 绿色画刷
          painter.drawRect(10, 30, 100, 50);
      
          // 绘制椭圆
          pen.setColor(Qt::blue);
          painter.setPen(pen);
          painter.setBrush(Qt::yellow); // 黄色画刷
          painter.drawEllipse(150, 30, 100, 50);
      
          // 绘制文本
          pen.setColor(Qt::magenta);
          painter.setPen(pen);
          painter.setFont(QFont("Arial", 16));
          painter.drawText(10, 100, "Hello, QPainter!");
      
          // 绘制图片
          QPixmap pixmap(":/images/sample_image.jpg"); // 确保有相应的图像资源
          painter.drawPixmap(10, 150, pixmap.scaled(200, 100)); // 缩放图片并绘制
      }

      };

      int main(int argc, char *argv[])
      {
      QApplication app(argc, argv);

      复制代码
      // 创建主窗口
      QMainWindow mainWindow;
      mainWindow.setWindowTitle("QPainter Example");
      mainWindow.resize(400, 300);
      
      // 创建自定义绘图控件
      PaintDemoWidget *paintDemoWidget = new PaintDemoWidget;
      mainWindow.setCentralWidget(paintDemoWidget);
      
      // 显示主窗口
      mainWindow.show();
      
      return app.exec();

      }

觉得有帮助的话,打赏一下呗。。

相关推荐
漫步企鹅1 天前
【VS Code - Qt】如何基于Docker Linux配置Windows10下的VS Code,开发调试ARM 版的Qt应用程序?
linux·qt·docker·arm·vs code·开发调试
pzzqq1 天前
buildroot编译qt 5.9.8 arm64版本踩坑
开发语言·qt
还债大湿兄1 天前
基于Qt Property Browser的通用属性系统:Any类与向量/颜色属性的完美结合
开发语言·qt
luciferau2 天前
Qt: WA_DontCreateNativeAncestors
qt
钱彬 (Qian Bin)2 天前
AI质检数据准备利器:基于Qt/QML 5.14的图像批量裁剪工具开发实战
qt·自定义·图像·qml·qt quick·裁剪工具
啊森要自信2 天前
【QT】常⽤控件详解(七)容器类控件 GroupBox && TabWidget && 布局管理器 && Spacer
linux·开发语言·c++·qt·adb
郝学胜-神的一滴2 天前
Horse3D引擎研发笔记(一):从使用Qt的OpenGL库绘制三角形开始
c++·qt·3d·unity·图形渲染·unreal engine
啊森要自信3 天前
【QT】常⽤控件详解(六)多元素控件 QListWidget && Table Widget && Tree Widget
c语言·开发语言·c++·qt
ZPC82103 天前
参数服务器 server and client
服务器·qt
牵牛老人3 天前
Qt中的QWebSocket 和 QWebSocketServer详解:从协议说明到实际应用解析
开发语言·qt·网络协议