我正在使用QQmlApplicationEngine
,如下所示:
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
app.exec();
但现在我想为我的应用启用多重采样,而QQmlApplicationEngine
似乎没有setFormat
方法来启用多重采样。
我找到了一种使用QQmlApplicationEngine
in a forum:
QQuickWindow* window = (QQuickWindow*) engine.rootObjects().first();
QSurfaceFormat format;
format.setSamples(16);
window->setFormat(format)
但它依赖于引擎的第一个根对象是QQuickWindow
,这在Qt文档中没有记录。所以我不想使用那种技术。
另一种方法是跳过QQmlApplicationEngine
并创建QQuickView
。这有一个setFormat
方法让我启用多重采样,但我想知道,我是否因为从QQmlApplicationEngine
切换到QQuickView
而丢失了任何内容?
换句话说,这两个类之间有什么区别?
我发现的一个区别是(来自here):
与QQuickView不同,QQmlApplicationEngine不会自动创建根窗口。如果您使用Qt Quick中的可视项目,则需要将它们放在窗口中。
这种特殊的差别对我来说无关紧要。
还有其他差异吗?
答案 0 :(得分:19)
标题:QQmlApplicationEngine比QQuickView更新,更强大。
QQmlApplicationEngine向QML公开了一些中央应用程序功能,QQuickView应用程序通常会从C ++控制它:
- 将Qt.quit()连接到QCoreApplication :: quit()
- 自动加载与主QML文件相邻的i18n目录中的翻译文件。
- 如果场景包含QQuickWindow,则自动设置孵化控制器。
- 自动将QQmlFileSelector设置为url拦截器,将文件选择器应用于所有QML文件和资产。
参考:Qt docs
在引入QQmlApplicationEngine时,Qt Blog had this to say:
在Qt 5.0中,我们通常通过声明a来创建Qt Quick应用程序 用C ++编写的QQuickView并在其上设置基本URL。缺点是 方法是你必须使用C ++来设置像width这样的属性, 在Qt 5.1中,我们鼓励使用Window或ApplicationWindow 作为您的应用程序的根项,完全控制Qt 快点,所以我们现在介绍QQmlApplicationEngine来制作 这个用例有点简单。 QmlApplicationEngine就是全部 你需要设置你的qt快速窗口,选择正确的翻译 文件和它隐式地将应用程序quit()信号连接到您的 根窗口。
Qt Quick Controls 2.0能够通过新项目ApplicationWindow利用这个额外的应用程序控制,其中:{/ p>
因此,为了使用一些Qt Quick Controls功能,如MenuBar和Popup,我们需要:
答案 1 :(得分:6)
如果您不希望自己的顶级项目为Window
,则可以同时使用它们。
QQmlApplicationEngine engine;
QQuickView view(&engine, 0);
// your usual engine code
view.show();