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

【Qt中2D绘图的类有哪些】

Question

介绍Qt中2D绘图的类有哪些

Answer

在 Qt 中,2D 绘图主要通过一系列的类来实现,这些类提供了丰富的功能来绘制图形、文本、图像等。以下是一些主要的 2D 绘图类及其简要介绍:

1. QPainter

QPainter 是 Qt 中最核心的绘图类,提供了丰富的绘图功能,包括绘制线条、形状、文本、图像等。它可以在各种绘图设备上进行绘图,如窗口、图片、打印机等。

2. QPaintDevice

QPaintDevice 是一个抽象基类,表示可以绘制的设备。QWidgetQPixmapQImage 等都是它的子类。QPainter 可以在这些设备上进行绘图。

3. QWidget

QWidget 是所有用户界面对象的基类,它也是一个绘图设备。通过重写 paintEvent 方法,可以在窗口部件上进行自定义绘图。

4. QPixmap

QPixmap 是一个用于绘图的屏幕外图像表示。它通常用于需要在屏幕上显示的图像,如图标、按钮背景等。

5. QImage

QImage 提供了与硬件无关的图像表示,可以直接访问和操作图像的像素数据。它通常用于图像处理和图像操作。

6. QPicture

QPicture 是一个绘图设备,可以记录和重放 QPainter 的命令。它通常用于存储绘图操作,以便稍后重放。

7. QBrush

QBrush 用于定义填充形状的样式和颜色。它可以是纯色、渐变、纹理等。

8. QPen

QPen 用于定义线条的样式和颜色。它可以是实线、虚线、点线等,并可以设置宽度、颜色等属性。

9. QFont

QFont 用于定义文本的字体。可以设置字体名称、大小、粗细、斜体等属性。

10. QTransform

QTransform 用于表示二维坐标系的线性变换,如旋转、缩放、平移等。它可以应用于 QPainter 的绘图操作。

11. QPainterPath

QPainterPath 用于创建和操作复杂的形状。它可以包含多个子路径,每个子路径可以是直线、曲线、矩形等。

示例代码

以下是一个简单的示例,展示如何使用这些类进行 2D 绘图:

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPen>
#include <QBrush>
#include <QFont>
#include <QTransform>class MyWidget : public QWidget {
protected:void paintEvent(QPaintEvent *event) override {Q_UNUSED(event);QPainter painter(this);// 设置画笔QPen pen;pen.setColor(Qt::blue);pen.setWidth(2);painter.setPen(pen);// 设置画刷QBrush brush;brush.setColor(Qt::green);brush.setStyle(Qt::SolidPattern);painter.setBrush(brush);// 绘制矩形painter.drawRect(50, 50, 200, 100);// 设置字体QFont font;font.setPointSize(16);font.setBold(true);painter.setFont(font);// 绘制文本painter.drawText(QPoint(100, 100), "Hello, QPainter!");// 变换操作QTransform transform;transform.translate(100, 100);transform.rotate(45);painter.setTransform(transform);// 绘制旋转后的矩形painter.drawRect(0, 0, 100, 50);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyWidget widget;widget.resize(400, 300);widget.show();return app.exec();
}

在这个示例中,我们创建了一个自定义的 QWidget 子类 MyWidget,并在其 paintEvent 方法中使用 QPainter 绘制了一个矩形和一些文本,并进行了变换操作。运行这个程序将会显示一个窗口,窗口中有一个蓝色的矩形和绿色的文本,以及一个旋转后的矩形。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【面试之算法篇】寻找二叉树中两个节点的最低公共祖先
  • JSON 提取器:从文本中提取 JSON 内容的实用工具
  • Android系统Android.bp文件详解
  • el-tree自定义节点内容
  • Java的线程实现
  • 实时捕捉与追溯:得物基于 eBPF 打造云上网络连接异常摄像头
  • Android常用面试题
  • 2024年8月一区SCI-海市蜃楼优化算法Fata morgana algorithm-附Matlab免费代码
  • C 语言中的头文件
  • Qt QSettings操作配置文件详细介绍
  • golang下载、上传文件MD5高效计算方法,利用io.TeeReader函数特性 实时计算文件md5签名
  • 数据结构-快速排序与归并排序(递归与非递归)
  • 大数据应用组件
  • C++ | Leetcode C++题解之第327题区间和的个数
  • 编程-笔记三:行为型设计模式-小结
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • httpie使用详解
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript 一些 DOM 的知识点
  • JavaScript创建对象的四种方式
  • java中具有继承关系的类及其对象初始化顺序
  • Just for fun——迅速写完快速排序
  • Logstash 参考指南(目录)
  • mongodb--安装和初步使用教程
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • python_bomb----数据类型总结
  • React+TypeScript入门
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Terraform入门 - 3. 变更基础设施
  • 从tcpdump抓包看TCP/IP协议
  • 缓存与缓冲
  • 今年的LC3大会没了?
  • 理解在java “”i=i++;”所发生的事情
  • 免费小说阅读小程序
  • 目录与文件属性:编写ls
  • 小而合理的前端理论:rscss和rsjs
  • 用简单代码看卷积组块发展
  • #pragma once
  • $().each和$.each的区别
  • $refs 、$nextTic、动态组件、name的使用
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (C语言)fgets与fputs函数详解
  • (搬运以学习)flask 上下文的实现
  • (备份) esp32 GPIO
  • (编译到47%失败)to be deleted
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (推荐)叮当——中文语音对话机器人
  • (转)用.Net的File控件上传文件的解决方案
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .describe() python_Python-Win32com-Excel
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost