QT基础教程(图形处理)

举报
yd_274589494 发表于 2023/09/24 18:30:26 2023/09/24
【摘要】 @TOC 前言本篇文章我来给大家讲解QT中非常重要的一个知识点,掌握了这个知识点后我们就能够掌握各种精美图形的绘制了。 一、QImage类QImage、QPixmap 和 QPainter 是 Qt 中用于图像处理和绘图的重要类。下面我将分别介绍这些类,并提供示例代码来说明它们的基本用法。QImage 类:QImage 是 Qt 中用于表示和处理图像数据的类。它可以加载、保存、编辑和绘制图像...

@TOC


前言

本篇文章我来给大家讲解QT中非常重要的一个知识点,掌握了这个知识点后我们就能够掌握各种精美图形的绘制了。

一、QImage类

QImage、QPixmap 和 QPainter 是 Qt 中用于图像处理和绘图的重要类。下面我将分别介绍这些类,并提供示例代码来说明它们的基本用法。

QImage 类:
QImage 是 Qt 中用于表示和处理图像数据的类。它可以加载、保存、编辑和绘制图像。以下是一些 QImage 类的常见特性:

可以从文件、内存或其他图像数据源加载图像。
支持多种图像格式,如 PNG、JPEG、BMP 等。
可以进行图像的剪裁、缩放、旋转和变换。
允许像素级别的编辑和访问。
示例代码:创建一个空白的 QImage 对象,绘制一些图形,并保存到文件。

#include <QImage>
#include <QColor>

int main() {
    // 创建一个空白的 QImage 对象,大小为 300x200,颜色为白色
    QImage image(300, 200, QImage::Format_RGB32);
    image.fill(Qt::white);

    // 在图像上绘制一个红色的矩形
    QPainter painter(&image);
    painter.setPen(Qt::red);
    painter.drawRect(50, 50, 200, 100);

    // 保存图像到文件
    image.save("example.png");

    return 0;
}

二、QPixmap类

QPixmap 类:
QPixmap 是 Qt 中用于在窗口或小部件上绘制图像的类。它通常用于创建可视化界面中的图像元素,如按钮、标签等。以下是一些 QPixmap 类的常见特性:

用于在内存中创建图像,通常用于绘制到窗口或小部件上。
支持多种图像格式。
可以在 QPainter 上绘制,然后将其显示在小部件上。
示例代码:创建一个 QPixmap 对象,绘制一些图形,并显示在窗口上。

#include <QApplication>
#include <QWidget>
#include <QPixmap>
#include <QPainter>

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

    // 创建一个窗口
    QWidget window;
    window.setWindowTitle("Pixmap Example");
    window.resize(400, 300);

    // 创建一个 QPixmap 对象,大小为窗口大小
    QPixmap pixmap(window.size());
    pixmap.fill(Qt::white);

    // 在 QPixmap 上绘制一个蓝色的椭圆
    QPainter painter(&pixmap);
    painter.setPen(Qt::blue);
    painter.drawEllipse(50, 50, 300, 200);

    // 显示 QPixmap 在窗口上
    window.show();

    return app.exec();
}

三、QPainter类

在 Qt 中,QPainter 是用于在不同绘图设备上进行绘图操作的核心类之一。虽然 QPainter 本身并不是一个控件或窗口,但它经常与小部件、窗口和自定义绘图设备一起使用,以在它们上面执行绘图操作。为了在 QPainter 中执行绘图操作,通常需要在一个小部件或窗口的事件处理函数中创建和使用 QPainter 对象。以下是关于如何在 Qt 中使用 QPainter 的基本操作和事件重写函数:

绘图事件函数:

在 Qt 中,小部件和窗口可以重写一个称为 paintEvent 的事件处理函数,用于执行绘图操作。在这个函数中,你可以创建一个 QPainter 对象并使用它来绘制图形、文本等内容。

示例:

void MyWidget::paintEvent(QPaintEvent *event) {
    QPainter painter(this); // 创建一个 QPainter 对象,绘制在当前小部件上
    painter.setPen(Qt::red); // 设置画笔颜色为红色
    painter.drawLine(10, 10, 100, 100); // 绘制一条红色线段
    // 绘制更多图形和文本...
}

在这个示例中,paintEvent 函数创建了一个 QPainter 对象,然后使用它绘制了一条红色线段。

2.手动绘制:

除了在 paintEvent 函数中绘制外,你还可以在其他地方手动创建 QPainter 对象,并将其用于绘制,然后使用 QPaintDevice::update() 函数来触发重绘操作。

示例:

void MyWidget::someFunction() {
    QPainter painter(this); // 创建一个 QPainter 对象
    painter.setPen(Qt::blue); // 设置画笔颜色为蓝色
    painter.drawRect(50, 50, 100, 100); // 绘制一个蓝色矩形

    update(); // 触发重绘操作,调用 paintEvent
}

3.绘图坐标系统:
在这个示例中,someFunction 函数手动创建了一个 QPainter 对象,并在其中绘制了一个蓝色矩形。然后,通过调用 update() 来请求重绘操作,从而触发 paintEvent 的执行。

QPainter 使用坐标系统来确定在绘图设备上的位置。默认情况下,坐标原点位于左上角,x 增加向右,y 增加向下。你可以使用 QPainter::translate() 函数来改变坐标系统的原点位置。

示例:

void MyWidget::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    painter.translate(100, 100); // 将坐标原点平移到 (100, 100) 处
    painter.drawRect(0, 0, 50, 50); // 在新坐标系统中绘制矩形
}

在这个示例中,translate 函数将坐标原点移到 (100, 100),然后在新坐标系统中绘制了一个矩形。

这些是在 Qt 中使用 QPainter 进行绘图操作的基本操作和概念。通过重写事件处理函数,并在其中创建和使用 QPainter 对象,你可以自定义绘制小部件和窗口的外观,以满足你的应用程序需求。

总结

本篇文章就讲解到这里,下篇文章我们再见。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。