QQuick-自绘

news/2024/10/20 5:23:07/

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.ppmy.cn/news/44047.html

相关文章

element-ui实现表格内容修改

<template><el-table:row-class-name"tableRowClassName"border:data"tableData"cell-dblclick"doubleClickCell"style"width: 100%"><el-table-columnprop"description"label"项目"align"ce…

口令暴力破解--Telnet协议暴力破解、数据库暴力破解与远程桌面暴力破解

Telnet协议暴力破解 Telnet Telnet协议是TCP/IP协议族中的一员&#xff0c;是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。要开始一个telnet会话&#xff0c;必须输入用户名和密码来登录服务器。而一般服务器不会对用户名…

CRM管理系统有哪些优势?在企业中有什么作用?

CRM管理系统有哪些优势&#xff1f;在企业中有什么作用&#xff1f; 其实&#xff0c;公司上crm管理系统不仅不会增加员工负担&#xff0c;还能提升员工满意度、赋能员工。当然&#xff0c;前提是一款优质的CRM管理系统。 那么&#xff0c;一款优质的CRM管理系统一般具备哪些…

c++11 标准模板(STL)(std::stack)(三)

定义于头文件 <stack> template< class T, class Container std::deque<T> > class stack;std::stack 类是容器适配器&#xff0c;它给予程序员栈的功能——特别是 FILO &#xff08;先进后出&#xff09;数据结构。 该类模板表现为底层容器的包装…

【数据挖掘与商务智能决策】第九章 随机森林模型

9.1.3 随机森林模型的代码实现 和决策树模型一样&#xff0c;随机森林模型既可以做分类分析&#xff0c;也可以做回归分析。 分别对应的模型为随机森林分类模型&#xff08;RandomForestClassifier&#xff09;及随机森林回归模型&#xff08;RandomForestRegressor&#xff…

Files的常用方法都有哪些?

文章目录Files的常用方法都有哪些&#xff1f;Files方法方法说明Files. exists()检测文件路径是否存在。Files. createFile()创建文件。Files. createDirectory()创建文件夹。Files. delete()删除一个文件或目录。Files. copy()复制文件。Files. move()移动文件。Files. size()…

UE4读取本地XML文件

关键词&#xff1a;UE4 UE5 Unreal Engine XML 文件 txt 需求&#xff1a; 游戏开发中需要读取了写入配置文件&#xff0c;需要保存场景信息&#xff0c;道具位置旋转信息&#xff0c;那么将其保存为XML是一个不错的办法。 涉及知识点&#xff1a; 怎样读取xml文件 思路 …

Keil工程中的C语言的基础学习(持续更新)

一、运算符的学习使用 1.1 移位运算符 左移运算符和右移运算符 使用对象&#xff1a;一般为进制数&#xff08;10进制&#xff0c;2进制&#xff0c;16进制等..&#xff09; a 0x01; #define b (a<<1) //将变量a 16进制转换位2进制&#xff0c;得到01&#xff1b; /…