QT原理与源码分析之如何开发一个自定义的绘图设备和QT绘图引擎?

本文详细介绍了如何在QT中自定义QPaintDevice和QPaintEngine,包括自定义绘图设备类的关键在于同时创建对应的绘图引擎类,以及自定义绘图引擎需要重写QPaintEngine的虚函数。通过这样的方式,可以支持新的绘图后端并在QT应用程序中实现特定的绘制需求。
摘要由CSDN通过智能技术生成

简介

本文将介绍如何自定义QT绘图设备类和如何自定义QT绘图引擎类。

【QT免费公开课】您可以到这里观看大量的QT视频课程

【QT付费视频课程】QT核心模块原理与源码分析

【QT付费视频课程】QT Widgets应用程序优化

【QT付费视频课程】QT QML应用程序优化

目录

QT绘图设备抽象类QPaintDevice

QT绘图引擎抽象类QPaintEngine

自定义绘图设备类

自定义绘图引擎类

运行效果

正文

QT绘图设备抽象类QPaintDevice

绘图设备是二维空间的抽象,可以使用QPainter绘制。其默认坐标系的原点位于左上角位置。X 向右增加,Y 向下增加。单位为一个像素。

QPaintDevice的绘图功能目前由QWidget,QImage,QPixmap,QPicture和QPrinter子类实现。

从QT助手 API DOC中可以找到QPaintDevice类型的API接口。

在这里插入图片描述

QPaintDevice类型的API接口

QT绘图引擎抽象类QPaintEngine

Qt为我们支持不同绘图后端提供了几个QPaintEngine的预制实现。提供的主要绘图引擎是光栅绘制引擎,其中包含一个软件光栅器,该光栅器支持所有受支持平台上的全部功能集。这是在Windows,X11和macOS等基于QWidget的类上绘画的默认设置,它是在QImage上绘画的后端,它被用作不支持某种功能的绘画引擎的后备。此外,我们还为OpenGL(可通过QOpenGLWidget访问)和打印(允许使用QPainter在QPrinter对象上绘制)提供QPaintEngine实现。

自定义绘图设备类

从QT助手 API DOC中写了这样一段话来介绍如何自定义绘图设备,最关键的一点就是自定义一个绘图设备类时,必须同时自定义一个与之对应的绘图引擎类。

To implement support for a new backend, you must derive from QPaintDevice and reimplement the virtual paintEngine() function to tell QPainter which paint engine should be used to draw on this particular device. Note that you also must create a corresponding paint engine to be able to draw on the device, i.e derive from QPaintEngine and reimplement its virtual functions.

要实现对新后端的支持,您必须从 QPaintDevice 派生并重新实现虚函数 paintEngine() ,以告诉 QPainter 应该使用哪个绘图引擎来绘制此特定设备。请注意,您还必须创建一个相应的绘图引擎才能在设备上绘图,即从 QPaintEngine 派生并重新实现其虚函数。

下面是自定义的QT绘图设备类的定义。

在这里插入图片描述

自定义QT绘图设备类ButianyunPaintDevice

自定义绘图引擎类

如果要使用 QPainter 绘制到不同的后端,则必须对 QPaintEngine 进行子类化并重新实现其所有虚函数。然后,通过子类化 QPaintDevice 并重新实现虚函数 QPaintDevice::paintEngine( )来提供 QPaintEngine 实现。

下面是自定义的QT绘图引擎。

在这里插入图片描述

自定义QT绘图引擎ButianyunPaintEngine

运行效果

下面是使用这个自定义的绘图设备和绘图引擎的一个测试代码。

在这里插入图片描述

使用这个自定义的QT绘图设备和绘图引擎的一个测试代码

在这里插入图片描述

使用这个自定义的QT绘图设备和绘图引擎的一个测试代码

下面是运行效果,左边是自定义绘图设备和绘图引擎的绘图结果,右边是QT框架内部的绘图设备和绘图引擎的绘图结果。

在这里插入图片描述

自定义QT绘图设备和QT绘图引擎的运行效果

总结

本文介绍了如何自定义QT绘图设备类和如何自定义QT绘图引擎类。

【QT免费公开课】您可以到这里观看大量的QT视频课程

【QT付费视频课程】QT核心模块原理与源码分析

【QT付费视频课程】QT Widgets应用程序优化

【QT付费视频课程】QT QML应用程序优化

如果您认为这篇文章对您有所帮助,请您一定立即点赞+喜欢+收藏,本文作者将能从您的点赞+喜欢+收藏中获取到创作新的好文章的动力。如果您认为作者写的文章还有一些参考价值,您也可以关注这篇文章的作者。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值