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
      #include
      #include
      #include
      #include
      #include

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

      }

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

相关推荐
用户805533698035 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner5 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz10 天前
QML Hello World 入门示例
qt
xcyxiner13 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner14 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner14 天前
DicomViewer (添加模型类)3
qt
xcyxiner15 天前
DicomViewer (目录调整) 2
qt
xcyxiner15 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能17 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G17 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt