回答:关于Qt QtQuick写跨平台图像处理软件的问题

目标是用qt quick 实现一款跨android、ios/mac、windows的图像处理app。
需要用GPU加速提高图像处理速度。
我这目前了解到的方案:
c++端使用GPU的途径:
1、使用Qt3D的c++api;(略了解些,各平台抽象过的API,略麻烦,好像简单的渲染都要遵从ECS模型)
2、使用Quick3d的c++api;(在qt文档中查到的资料也比较少)
3、使用QRhi的c++api;(这个在qt文档中比较少查到,是不是就是Qt3d改的)
4、直接使用opengl/metal的api;(这个比较熟悉,资料多谢,直接写,担忧quick界面也是gpu渲染,会不会相互影响)
qml端展示texture或3d场景的途径:
1、继承QuickItem,改QSGNode等,展示texture;
2、直接quick3d的view3d显示Quad呈现texture;
3、使用Qt3D显示Quad呈现texture;

总得想法是后端c++用GPU处理好texture,前端实时更新texture。qml端只负责展示,减少js逻辑,主体在c++端。
目前困难是对以上几种途径方案不深入了解,无法选择方案。
请赐教一二!


用QtQuick写GUI方便,同时能写一些漂亮的动画效果。 其实用QtWidget写GUI也很简单的,复杂的可以自己绘制封装出来。
 

音视频图像处理软件,比如视频剪辑,直播,特效之类,或者3D设计类软件,工具属性多一些。工具软件,界面设计个人建议偏向效率与生产力,对提高用户的工作效率,工作流,以及易用性方面多考虑一些。
 

所以个人建议用纯C++ OpenGL构建你的大部分核心业务。比如FFmpeg OpenGL OpenCV,网络通讯,这些都可以做到跨平台。然后上层界面,可以用Qt,也可以用手机上原生的,做到随时可以替换。目前我们的软件大部分都这样的。
 

目前OpenGL/ES,可以在所有平台上跑,虽然苹果上推Metal,但依然在支持OpenGL/ES。 说白了Metal推了块10年,依然推不动。QtQuick,Qt3D,QRHI这些框架,在做一些比较简单通用的程序的时候,能给你带来一些方便。但图像处理这些需要深度结合GL/Metal API写的项目,用纯c++构建,相反还单纯很多。多种开发语言揉到一起,最后反而难以维护。
 

Qt最方便的地方,在于它在PC/Mac上能够跨平台开发商业软件。而不用维护两套界面。

至于移动端,有很多地方反而会更麻烦。需要去揉一些native代码达到效果。即使PC/Mac,也有一些差异,这需要长期做跨平台开发的经验,而仅仅是一套代码,到处跑无差异。


我们的做法是,纯c++构建所有的核心代码,做到跨平台。然后上层界面,PC/Mac上可以用QtWidget。 如果硬要在移动上用Qt,QtWidget能用,QML也行。一般用原生UI界面较多。


学习QtOpenGL QtRHI这些框架,你会发现它很多时候在各个平台,依然还有很多问题。

但是我们可以去学习它的一些设计理念,然后最终的目的是封装一套自己的东西。

代码在自己手里,同时能在所有的平台上保持的灵活性,而不受制于Qt框架本身. 如果它有什么问题,还得去看/改源码. 所以我就建议我们群里一些同学,比如Qt的模版库很好用,你就去照着搞一套自己的类似的,然后在所有平台跑。而不依赖Qt,我觉得这是我一直使用学习qt,并喜欢它的原因。
 

时间有限,只能回复这点内容,希望对你有小帮助。

猜你喜欢

转载自blog.csdn.net/chenchao_shenzhen/article/details/124892763