回答: Qt QtQuick 書き込みクロスプラットフォーム画像処理ソフトウェアに関する質問

目標は、qt Quick を使用して、Android、iOS/Mac、Windows にまたがる画像処理アプリを実装することです。
画像処理速度を上げるにはGPUアクセラレーションが必要です。
これまでに学んだ解決策:
C++ 側で GPU を使用する方法:
1. Qt3D の c++api を使用します (少し理解、各プラットフォームの抽象化された API は少し面倒、単純なレンダリングは必要ないようです) ECS モデルに従う必要があります)
2. Quick3d の c++api を使用します (qt ドキュメントにある情報は比較的少ないです)
3. QRhi の c++api を使用します (これは qt ドキュメントでは比較的まれですが、 Qt3d によって変更されただけですか)
4. opengl/metal API を直接使用します (これはよく知られています。情報をありがとう、クイック インターフェイスも GPU レンダリングであることを心配しながら直接書きます。相互に影響を与えるかどうか) テクスチャを表示する方法、
またはqml側の3dシーンは、
1.QuickItemの継承やQSGNodeの変更などをしてテクスチャを表示する;
2.quid3dのview3dを直接Quadレンダリングテクスチャを表示する;
3.Qt3Dを使ってQuadレンダリングテクスチャを表示する; 3.

一般的な考え方は、バックエンド C++ が GPU を使用してテクスチャを処理し、フロントエンドがテクスチャをリアルタイムで更新するというものです。qml側はjsロジックを減らして表示のみを担当し、本体はc++側にあります。
現時点での課題は、上記のアプローチや計画を深く理解していないため、計画を選択できないことです。
1つか2つ教えてください!


QtQuick で GUI を書くと便利で、美しいアニメーション効果も同時に書くことができます。実際、QtWidget を使用した GUI の作成も非常に簡単で、複雑なものは自分で描画してカプセル化することができます。
 

ビデオ編集、ライブ ブロードキャスト、特殊効果、3D デザイン ソフトウェアなどのオーディオおよびビデオ画像処理ソフトウェアには、さらに多くのツール属性があります。ツール ソフトウェアとインターフェイスの設計に関する個人的な提案は効率と生産性に偏っており、ユーザーの効率、ワークフロー、使いやすさの向上についてさらに考慮する必要があります。
 

したがって、私は個人的に、コア ビジネスのほとんどを純粋な C++ OpenGL で構築することをお勧めします。たとえば、FFmpeg OpenGL OpenCV、ネットワーク通信など、これらはクロスプラットフォームで使用できます。その後、上部のインターフェイスは Qt を使用することも、携帯電話の元のインターフェイスを使用することもできるため、いつでも置き換えることができます。現時点では、ほとんどのソフトウェアがこのようになっています。
 

現在、OpenGL/ES はすべてのプラットフォームで実行でき、Apple は Metal を立ち上げましたが、依然として OpenGL/ES をサポートしています。ハッキリ言ってメタルは10年推してるけど未だに推せない。QtQuick、Qt3D、QRHI などのフレームワークは、比較的単純で汎用的なプログラムを実行するときに便利です。ただし、GL/Metal API を使用して詳細に記述する必要がある画像処理プロジェクトは、逆にはるかに単純な純粋な C++ で構築されます。複数の開発言語が混在すると、最終的にはメンテナンスが難しくなります。
 

Qt の最も便利な点は、PC/Mac 上のプラットフォームをまたがって商用ソフトウェアを開発できることです。2 セットのインターフェイスを維持する代わりに。

携帯端末に関しては、もっと面倒になるところがたくさんあります。効果を得るにはネイティブ コードを練り込む必要があります。PC/Macでも多少の違いはあり、クロスプラットフォーム開発には長期の経験が必要ですが、単なるコードの集合であり、走り回る分には違いはありません。


私たちのアプローチは、クロスプラットフォームを実現するために、すべてのコア コードを純粋な C++ で構築することです。次に、上部のインターフェイスである QtWidget は PC/Mac 上で使用できます。モバイルで Qt を使用したい場合は、QtWidget を使用できます。また、QML も使用できます。一般に、よりネイティブな UI インターフェイスが使用されます。


QtOpenGL QtRHI のフレームワークを学ぶと、さまざまなプラットフォームでよく使用されており、まだ多くの問題があることがわかります。

しかし、その設計コンセプトの一部を学ぶことはでき、最終的な目標は、独自のもののセットをカプセル化することです。

コードは自分自身で作成できると同時に、Qt フレームワーク自体に制限されることなく、すべてのプラットフォームでの柔軟性を維持でき、問題がある場合はソースコードを読み取って変更する必要があるため、お勧めします。たとえば、Qt のテンプレート ライブラリは非常に便利なので、これに倣って独自の同様のライブラリを構築し、すべてのプラットフォームで実行できます。Qt に依存するのではなく、これが私が Qt を使用し学習し、Qt を気に入っている理由だと思います。
 

時間が限られているのでこの内容しか返信できませんが、少しでもお役に立てれば幸いです。

おすすめ

転載: blog.csdn.net/chenchao_shenzhen/article/details/124892763