web-dev-qa-db-ja.com

さまざまなQtプラットフォームプラグインの用途は何ですか?

ARMベースのターゲット(TI AM335x EVM))のQt5.2アプリケーションのクロスコンパイルを行っていましたが、プラットフォームに何も表示できませんでした。それを起動した場合:

 ./helloworld -platform eglfs

表示されます(フルスクリーンですが、機能しました)!

私はすべてのプラットフォームオプションを調べ始めました。

Android、eglfs、linuxfb、minimalegl、windows、xcb、cocoa、ios、offscreen、qnx、directfp、kms、minimal、openwfd

彼らが何のためにあるのか疑問に思っています。たとえば、Androidデバイスでアプリケーションを実行したい場合、-platform Android、しかし、それらはすべて私には明らかではありません。

これらの各パラメーターを使用する必要がある場所のリストはありますか?

たとえば、eglfsは何を表していますか?そして、linuxfbが機能しないのに、なぜそれを使用する必要があったのですか?
(組み込みのLinuxで実行されているので、アプリケーションを起動したいのはLinuxフレームバッファーだと思っていたでしょう)

18
Mike

linuxfbプラグインが機能しない場合は、システムのフレームバッファデバイスを正しく構成していない可能性があります。おそらくdirectfレイヤーが既に実行されているので、代わりにdirectfbプラグインを試してみてください。

実行可能ファイルを実行するときにプラットフォームオプションを指定する必要がないようにする場合は、Qtをビルドするときにデフォルトのオプションをconfigureに渡すことができます。

プラグインは次のように説明できます。

  • Linuxプラグイン-Linux固有の入力デバイスとさまざまな出力デバイスを使用します

    • eglfs-OpenGL ESを全画面モードで使用します。 OpenGLにはウィンドウマネージャーの概念がないため、他に方法はありません。

    • directfb(directfpではない)-OpenGL ESで directfb レイヤーを介してLinuxフレームバッファーを使用します。 directfbウィンドウ処理に統合します。

    • linuxfb-フルスクリーンモードでLinuxフレームバッファーを使用します。 linuxfbにはウィンドウマネージャーの概念がないため、他に方法はありません。

    • kms-Linuxカーネルモード設定APIを全画面モードで使用します。 DRMにはウィンドウマネージャーの概念がないため、他に方法はありません。

    • openwfd-全画面モードで openwfd Wifiディスプレイを使用します。 openwfdにはウィンドウマネージャーの概念がないため、他に方法はありません。

  • プラットフォームに依存しないプラグイン-任意のOSで実行できるようにすることができます

    • xcb-X11サーバーで実行され、X11ウィンドウ環境に統合されます。一般に、ウィンドウマネージャーも実行していないと、正しく動作しません。 xlibのWindows実装を前提として、たとえばWindowsサーバーからX11シンターミナル(通常はUnixボックス)にアプリケーションを提供する場合、Windowsで動作させることができます。

    • offscreen-オフスクリーンバッファーにレンダリングします。カスタムディスプレイへのレンダリングに役立ちます。

    • minimal-オプションで仮想画面をファイルにダンプする最小限のバッキングストア。プラットフォームプラグインの作成を開始する方法を示すために、最低限の機能を実装します。

  • その他のプラットフォーム固有のプラグイン

    • Android-Android APIを使用し、Android環境に統合されています。

    • windows-WINAPIを使用し、Windowsウィンドウ環境に統合されています。

    • cocoa-Cocoa APIを使用し、OS Xウィンドウ環境に統合されています。

    • iOS-iOSツールキットを使用し、iOS環境に統合されています。

    • qnx-QNX APIを使用し、QNXフォトンウィンドウ環境に統合されています。

24

私はTIフォーラムで同じクエリに返信しました。 eglfsが機能していてlinuxfbが機能していない場合は、qt-project.orgを使用してJIRAにバグを報告してください。AM335xのeglfsとlinuxfbはどちらもlinuxフレームバッファーを使用するためです。 eglfs(ウィジェットアプリケーションで使用する場合)は、全画面表示でダーティレクタングルアプローチを使用します。 Qt5の場合は、可能であればQMLに移動します。

PS:ターゲットでQT_QPA_PLATFORM=eglfs(またはlinuxfb)をエクスポートして、アプリケーションを呼び出すたびにプラットフォームが設​​定されるのを回避できます。 ( http://doc.qt.io/qt-5/embedded-linux.html

1
Prabindh