簡體   English   中英

QQmlApplicationEngine和QQuickView有什么區別?

[英]What is the difference between QQmlApplicationEngine and 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方法讓我實現多重采樣,但我不知道,我是通過切換失去任何東西QQmlApplicationEngineQQuickView

換句話說,這兩個類之間有什么區別?

我找到的一個區別是(從這里 ):

與QQuickView不同,QQmlApplicationEngine不會自動創建根窗口。 如果您使用Qt Quick中的可視項目,則需要將它們放在窗口內。

這種特殊的差異對我來說無關緊要。

還有其他差異嗎?

標題:QQmlApplicationEngine比QQuickView更新,更強大。

QQmlApplicationEngine向QML公開了一些中央應用程序功能,QQuickView應用程序通常會從C ++控制它:

  • 將Qt.quit()連接到QCoreApplication :: quit()
  • 從與主QML文件相鄰的i18n目錄自動加載轉換文件。
  • 如果場景包含QQuickWindow,則自動設置孵化控制器。
  • 自動將QQmlFileSelector設置為url攔截器,將文件選擇器應用於所有QML文件和資產。

參考: Qt docs

在引入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屬性支持彈出窗口,這可確保彈出窗口顯示在其他內容之上,並且當模式彈出窗口可見時背景變暗。

因此,為了使用一些Qt Quick Controls功能,如MenuBar和Popup,我們需要:

  • 使用ApplicationWindow作為我們的頂級QML項而不是Rectangle或Item
  • 使用新的QQmlApplicationEngine從C ++而不是舊的QQuickView加載QML。

如果您不希望頂級項目成為Window ,則可以同時使用它們。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM