42、绘图基础---------绘图

张开发
2026/4/7 8:34:21 15 分钟阅读

分享文章

42、绘图基础---------绘图
绘图基础Qt 绘图系统概述Qt 的绘图系统基于设备无关性Device-Independent允许开发者在不同的平台上创建一致的图形界面。主要组件包括●QPainter用于在各种绘图设备如窗口、图像、打印机等上进行绘制操作。●绘图设备QPaintDevice如 QWidget、QImage、QPixmap、QPrinter 等提供绘图的目标。●坐标系统Qt 使用二维坐标系支持坐标变换缩放、旋转、平移等以简化复杂的绘图任务。●QGraphicsScene/QGraphicsView高级图形框架用于管理和显示大量的二维图形项并支持复杂的用户交互。接下来我们将深入探讨这些组件及其应用。QPainter 基础QPainter 是 Qt 中进行绘图的核心类。它提供了一组丰富的方法来绘制各种形状、文本、图像等。绘图设备QPainter可以在多种绘图设备上绘制包括QWidget在窗口或自定义控件上绘制。QImage在图像上绘制适用于图像处理。QPixmap在位图上绘制常用于图形显示。QPrinter用于打印任务。在大多数情况下开发者会在自定义QWidget的paintEvent中使用QPainter。基本用法创建和初始化QPainter:void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); // this 是 QWidget 的指针 // 进行绘制操作 }通常在QWidget的paintEvent方法中使用QPainter。您需要创建一个QPainter对象并将其与一个QPaintDevice如QWidget、QPixmap或QImage关联。绘制基本形状:// 绘制直线 painter.drawLine(10, 10, 100, 100); // 绘制矩形 painter.drawRect(20, 20, 80, 60); // 绘制圆形 painter.drawEllipse(50, 50, 80, 80);QPainter提供了多种方法来绘制基本形状如直线、矩形、圆形等。绘制文本:painter.setFont(QFont(Arial, 16)); painter.drawText(30, 30, Hello, Qt!);使用drawText方法绘制文本可以指定字体、颜色等。设置颜色和画笔:QPen pen(Qt::blue); // 创建蓝色画笔 painter.setPen(pen); QBrush brush(Qt::green); // 创建绿色填充 painter.setBrush(brush);使用QPen设置线条的颜色和样式使用QBrush设置填充颜色。绘制图像:QImage image(path/to/image.png); painter.drawImage(10, 10, image);使用drawImage或drawPixmap方法绘制图像。变换和旋转:painter.translate(50, 50); // 移动原点 painter.rotate(45); // 旋转 painter.drawRect(0, 0, 100, 100); // 绘制相对于新原点的矩形可以通过translate、rotate和scale方法进行坐标变换。保存和恢复状态:painter.save(); // 保存当前状态 painter.setPen(Qt::red); painter.drawLine(0, 0, 100, 100); painter.restore(); // 恢复到保存的状态可以使用save和restore方法保存和恢复QPainter的状态以便在绘制时进行临时更改。绘制路径:QPainterPath path; path.moveTo(20, 20); path.lineTo(80, 20); path.lineTo(80, 80); path.closeSubpath(); painter.drawPath(path);使用QPainterPath创建复杂的形状。基本绘图操作例如我们想要在QWidget中绘制图形需要自己定义一个Widget继承QWidget然后重写paintEvent事件在paintEvent中绘制图形.以下是一个基本的例子展示如何在自定义控件上绘制简单的图形和文本。示例自定义 QWidget 绘制基本图形创建项目的时候我们不选择创建主窗口而是选择基于QWidget创建自定义的PainterWidget我们自定义PainterWidget继承自QWidget然后重写的paintEvent事件class PainterWidget : public QWidget { Q_OBJECT public: explicit PainterWidget(QWidget *parent nullptr); ~PainterWidget(); protected: //重写paintEvent事件 void paintEvent(QPaintEvent* event) override; private: Ui::PainterWidget *ui; };实现重回逻辑//重写绘制事件 void PainterWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); // 设置抗锯齿 painter.setRenderHint(QPainter::Antialiasing, true); // 设置画笔和颜色 QPen pen(Qt::black); pen.setWidth(2); painter.setPen(pen); // 绘制矩形 painter.drawRect(50, 50, 100, 100); // 绘制椭圆 painter.setBrush(QBrush(Qt::green)); painter.drawEllipse(200, 50, 100, 100); // 绘制线条 painter.setPen(QPen(Qt::red, 3)); painter.drawLine(50, 200, 350, 200); // 绘制文本 painter.setPen(QPen(Qt::blue)); painter.setFont(QFont(Arial, 16)); painter.drawText(150, 250, Hello, Qt!); }效果说明矩形黑色边框椭圆绿色填充红色线条蓝色文字运行效果运行上述代码将显示一个包含矩形、椭圆、线条和文本的窗口。

更多文章