30

私は次のように使用し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 ドキュメントには記載されていません。だから私はそのテクニックを使いたくない。

別の方法は、スキップして代わりにQQmlApplicationEnginea を作成することです。QQuickViewこれにはマルチサンプリングを有効にする方法がありますが、 からにsetFormat切り替えることで何かが失われるのではないかと思っています。QQmlApplicationEngineQQuickView

言い換えれば、これら 2 つのクラスの違いは何ですか?

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

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

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

他に違いはありますか?

4

2 に答える 2

31

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

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

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

参照: Qt ドキュメント

QQmlApplicationEngine が導入された時点で、Qt ブログには次のように書かれていました

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

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

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

そのため、MenuBar や Popup などの Qt クイック コントロール機能の一部を使用するには、次のことを行う必要があります。

  • Rectangle または Item の代わりに、ApplicationWindow をトップレベルの QML アイテムとして使用します
  • 古い QQuickView の代わりに、新しい QQmlApplicationEngine を使用して C++ から QML をロードします。
于 2016-10-26T20:24:02.247 に答える