web-dev-qa-db-ja.com

QQmlApplicationEngineとQQuickViewの違いは何ですか?

私は次のようにQQmlApplicationEngineを使用しています:

QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

app.exec();

しかし、今ではアプリのマルチサンプリングを有効にしたいのですが、QQmlApplicationEngineにはマルチサンプリングを有効にするsetFormatメソッドがないようです。

QQmlApplicationEngineでそれを行う方法を見つけました フォーラムで

QQuickWindow* window = (QQuickWindow*) engine.rootObjects().first();
QSurfaceFormat format;
format.setSamples(16);
window->setFormat(format)

ただし、エンジンの最初のルートオブジェクトがQQuickWindowであることに依存しています。これはQtのドキュメントには記載されていません。だから私はそのテクニックを使いたくありません。

別の方法は、QQmlApplicationEngineをスキップして、代わりにQQuickViewを作成することです。これにはsetFormatメソッドがあり、マルチサンプリングを有効にできますが、QQmlApplicationEngineからQQuickViewに切り替えると何かが失われますか?

つまり、これら2つのクラスの違いは何ですか?

私が見つけた1つの違いはこれです( here から):

QQuickViewとは異なり、QQmlApplicationEngineはルートウィンドウを自動的に作成しません。 Qt Quickのビジュアルアイテムを使用している場合は、それらをウィンドウ内に配置する必要があります。

この特定の違いは私には関係ありません。

他の違いはありますか?

22
Stefan Monov

見出し:QQmlApplicationEngineはQQuickViewよりも新しく強力です。

QQmlApplicationEngineは、いくつかの中央アプリケーション機能をQMLに公開します。これは、QQuickViewアプリケーションが通常C++から制御します。

  • Qt.quit()をQCoreApplication :: quit()に接続する
  • メインQMLファイルに隣接するi18nディレクトリから翻訳ファイルを自動的にロードします。
  • シーンにQQuickWindowが含まれている場合、インキュベーションコントローラーを自動的に設定します。
  • QQmlFileSelectorをURLインターセプターとして自動的に設定し、すべてのQMLファイルとアセットにファイルセレクターを適用します。

参照: Qt docs

QQmlApplicationEngineが導入された時点で、 Qt Blogはこれを言っていました

Qt 5.0では、通常、C++でQQuickViewを宣言し、そのベースURLを設定することにより、Qt Quickアプリケーションを作成しました。このアプローチの欠点は、幅や高さなどのプロパティを設定するためにC++を使用する必要があることです。Qt5.1では、WindowまたはApplicationWindowをアプリケーションのルート項目として使用することをお勧めします。これにより、Qt Quickを完全に制御できます。 QQmlApplicationEngineを使用して、このユースケースをもう少しシンプルにします。 QmlApplicationEngineは、qtクイックウィンドウを設定し、適切な翻訳ファイルを選択するために必要なものすべてであり、アプリケーションのquit()シグナルを暗黙的にルートウィンドウに接続します。

Qt Quick Controls 2.0は、新しい項目 ApplicationWindow により、この追加のアプリケーションコントロールを利用できます。

  • 通常のQQuickWindowと似ていますが、QMLでウィンドウ固有のMenuBar、ToolBar、StatusBarの設定のサポートを追加します。
  • ウィンドウにヘッダーとフッターのアイテムを追加すると便利です。
  • qMLからウィンドウのプロパティ、外観、レイアウトを制御することができます。
  • オーバーレイプロパティを介してポップアップをサポートします。これにより、ポップアップが他のコンテンツの上に表示され、モーダルポップアップが表示されると背景が淡色表示されます。

そのため、MenuBarやPopupなどのQt Quick Controls機能を使用するには、次のことを行う必要があります。

  • トップレベルQMLアイテムとして、RectangleまたはItemの代わりにApplicationWindowを使用します
  • 新しいQQmlApplicationEngineを使用して、古いQQuickViewの代わりにC++からQMLをロードします。
21
Mark Ch

最上位のアイテムをWindowにしたくない場合は、両方を一緒に使用できます。

QQmlApplicationEngine engine;
QQuickView view(&engine, 0);
// your usual engine code
view.show();
5
Kevin Krammer