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

QQuick-自绘

QQuick提供了丰富的控件,搭配qml很容易就可以搭配出一套丝滑的UI界面。但是在有些场景下无论是出于效率还是现有控件的局限都需要进行自绘才能实现自身的需求。QQuick支持多种自绘:

可以使用的方案:

1. 继承QQuickPaintedItem ,重写 paint 函数

优点: 这个是最容易实现的方式,也非常贴合QWidget那一套方案,QPainter自绘的接口也是一样的,无学习成本。底层会根据操作转换为对应的OpenGL渲染。即不需要学习OpenGL的api也能享受到OpenGL用GPU渲染的好处

代价: renderTarget==QQuickPaintedItem::Image 在这个模式下,会有一层纹理数据的copy,性能上会有损失

2. 继承QQuickFrameBufferObject,重写 createRenderer 函数

createRenderer函数需要返回一个QQuickFramebufferObject::Renderer对象,自绘操作是在QQuickFramebufferObject::Renderer::render操作中进行的,这里面可以用OpenGL进行绘制操作

优点: 性能好,直接用OpenGL绘制,省去了纹理的copy操作

代价: 需要学习OpenGL相关知识

3. 继承QQuickItem,重写 updatePaintNode 

这种方法更直接,因为QQuick所有的可视元素都是继承QQuickItem,渲染的根本就是每一次update时调用每一个可视QQuickItem的updatePaintNode收集要渲染的内容,上面两种方式其实就是QQuick框架在内部定义好了 updatePaintNode 逻辑

优点: 性能好,省去了中间的其他转换逻辑,内部可以根据当前框架所使用的渲染方式(OpenGL、D3D\Metal(MAC)\Soft),来决定使用哪一套绘制方案。

代价: 需要学习更多关于本地绘制的api使用方法(OpenGL/D3D/Metal/Soft)

ps:指定QQuick使用那一套渲染框架: enum GraphicsApi {Unknown,Software,OpenGL,Direct3D12,OpenVG,OpenGLRhi,Direct3D11Rhi,VulkanRhi,MetalRhi,NullRhi,};QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software);

4. 连接QQuickWindow::beforeRendering/afterRendering,信号进行底层或者上层绘制,可以使用本地api(OpenGL/D3D/Metal/Soft)这些接口进行绘制,但是操作繁琐。

http://www.lryc.cn/news/60410.html

相关文章:

  • 【算法】【算法杂谈】已知[1,m]的等概率函数,求[1,n]的等概率函数
  • 【Python】Python中的列表,元组,字典
  • 分布式系统概念和设计-分布式对象和远程调用
  • 11-FastDFS
  • Word这样用,提高效率不加班
  • 【Linux】调试器---gdb的使用
  • MySQL数据库之表的增删改查(进阶)
  • Nginx从开始到结束,简单到小白都能懂哦
  • Qt——Qt控件之按钮-QDialogButtonBox对话框按钮盒子控件的使用总结(例程:自定义按钮)
  • 数据库学习-常用的SQL语句
  • 5种获取JavaScript时间戳函数的方法
  • 图的宽度优先遍历
  • 企业AD域(域控服务器)的安装和配置详细教程
  • 面试官:一千万的数据,你是怎么查询的?
  • IntelliJ 上 Azure Event Hubs 全新支持来了!
  • 性能测试,监控磁盘读写iostat
  • steam游戏搬砖项目怎么做?月入过万的steam搬砖项目教程拆解
  • 协同运力、算力、存力,加速迈向智能世界
  • 被裁员了,要求公司足额补缴全部公积金,一次补了二十多万!网友兴奋了,该怎么操作?...
  • 家庭智能插座一Homekit智能
  • 什么是雪花算法?啥原理?
  • 【华为OD机试真题】 统计差异值大于相似值二元组个数(javapython)
  • 【cmake篇】选择编译器及设置编译参数
  • MySQL having关键字详解、与where的区别
  • CSS中相对定位与绝对定位的区别及作用
  • 7.1 基本运放电路(1)
  • 交友项目【首页推荐,今日佳人,佳人信息】
  • kafka-5 kafka的高吞吐量和高可用性
  • Jmeter前置处理器和后置处理器
  • 手把手带你了解《线程池》