[英]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
方法讓我實現多重采樣,但我不知道,我是通過切換失去任何東西QQmlApplicationEngine
到QQuickView
?
換句話說,這兩個類之間有什么區別?
我找到的一個區別是(從這里 ):
與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利用這個額外的應用程序控件,其中:
因此,為了使用一些Qt Quick Controls功能,如MenuBar和Popup,我們需要:
如果您不希望頂級項目成為Window
,則可以同時使用它們。
QQmlApplicationEngine engine;
QQuickView view(&engine, 0);
// your usual engine code
view.show();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.