当前位置: 首页 > article >正文

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

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

           


http://www.kler.cn/a/379782.html

相关文章:

  • MySQL的约束和三大范式
  • 用于nodejs的开源违禁词检测工具 JavaScript node-word-detection
  • React第十三章(useTransition)
  • 服务器作业(2)
  • 4种鼓励创业创新的方法
  • 基于Multisim数控直流稳压电源电路(含仿真和报告)
  • React面试基础题大全(all)
  • C++ | Leetcode C++题解之第539题最小时间差
  • 创建型模式-建造者模式:构建复杂对象的优雅解决方案
  • springboot 单元测试-各个模块举例
  • 科研绘图系列:R语言多个组合堆积图(stacked plot)
  • 【1个月速成Java】基于Android平台开发个人记账app学习日记——第4天,注册登录逻辑代码
  • 理解 WordPress | 第一篇
  • 占地1.1万平,2亿投资的智能仓储系统:高架库、AGV、码垛机器人……
  • 基于MATLAB疲劳监测系统
  • 【基于LSM的ELF文件安全模块设计】参考
  • iOS 18.2 可让欧盟用户删除App Store、Safari、信息、相机和照片应用
  • PyTorch核心概念:从梯度、计算图到连续性的全面解析(一)
  • docker-compose安装rabbitmq 并开启延迟队列和管理面板插件(rabbitmq_delayed_message_exchange)
  • Harmony Next集成支付宝sdk失败
  • 2024-11-04 问AI: [AI面试题] 解释计算机视觉的概念
  • Linux/Unix grep命令
  • 实体(Entity)详解
  • Linux动态库和静态库
  • 分布式光伏管理办法
  • 批量转换图片格式(python学习)(11.3)