首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QQmlApplicationEngine和QQuickView有什么区别?

QQmlApplicationEngine和QQuickView有什么区别?
EN

Stack Overflow用户
提问于 2016-10-20 11:37:18
回答 2查看 16.7K关注 0票数 32

我使用QQmlApplicationEngine的方式如下:

代码语言:javascript
复制
QGuiApplication app(argc, argv);

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

app.exec();

但是现在我想为我的应用程序启用多采样,而QQmlApplicationEngine似乎没有支持多采样的setFormat方法。

我找到了一种用QQmlApplicationEngine 在论坛上做这件事的方法

代码语言:javascript
复制
QQuickWindow* window = (QQuickWindow*) engine.rootObjects().first();
QSurfaceFormat format;
format.setSamples(16);
window->setFormat(format)

但是它依赖于引擎的第一个根对象是QQuickWindow,Qt文档中没有记录这个对象。所以我不想用那个技巧。

另一种方法是跳过QQmlApplicationEngine并创建一个QQuickView。这确实有一个setFormat方法,允许我启用多采样,但我想知道,我从QQmlApplicationEngine切换到QQuickView是否丢失了什么?

换句话说,这两类之间有什么区别?

我发现的一个不同之处是(来自这里):

与QQuickView不同,QQmlApplicationEngine不会自动创建根窗口。如果您正在使用QtQuick中的可视项,则需要将它们放置在窗口中。

这个特别的区别对我来说并不重要。

还有什么不同吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-26 20:24:02

标题: QQmlApplicationEngine比QQuickView更新,功能更强大。

QQmlApplicationEngine向QML公开了一些中心应用程序功能,QQuickView应用程序通常会从C++中控制这些功能:

  • 将Qt.quit()连接到QCoreApplication::quit()
  • 自动从与主QML文件相邻的i18n目录加载转换文件。
  • 如果场景包含QQuickWindow,则自动设置孵化控制器。
  • 自动将QQmlFileSelector设置为url拦截器,将文件选择器应用于所有QML文件和资产。

参考文献:Qt文档

在引入QQmlApplicationEngine时,Qt博客有这样的说法

在Qt5.0中,我们通常通过在QQuickView中声明C++并在其上设置基本url来创建QQuickView。这种方法的缺点是您必须使用C++来设置诸如宽度、高度等属性。在QT5.1中,我们鼓励使用窗口或ApplicationWindow作为应用程序的根项,从而完全控制QtQuick,因此我们现在引入QQmlApplicationEngine,使这个用例变得简单一些。QmlApplicationEngine是设置qt快速窗口、获取正确的转换文件所需的全部内容,它将应用程序退出()信号隐式连接到根窗口。

QtQuickControls2.0可以通过新项ApplicationWindow利用这个额外的应用程序控件,它:

  • 类似于常规的QQuickWindow,但增加了对在QML中设置特定于窗口的MenuBar、ToolBar和StatusBar的支持。
  • 可以方便地向窗口添加页眉和页脚项。
  • 使从QML控制窗口的属性、外观和布局成为可能。
  • 通过其覆盖属性支持弹出,这可以确保弹出窗口显示在其他内容之上,并且当模式弹出可见时背景会变暗。

因此,为了使用Qt快速控件的一些特性,如MenuBar和弹出,我们需要:

  • 使用ApplicationWindow作为顶级QML项,而不是矩形或项。
  • 使用新的QQmlApplicationEngine从C++而不是旧的QQuickView加载QML。
票数 33
EN

Stack Overflow用户

发布于 2016-10-22 16:09:15

如果不希望顶级项成为Window,则可以同时使用这两种方法。

代码语言:javascript
复制
QQmlApplicationEngine engine;
QQuickView view(&engine, 0);
// your usual engine code
view.show();
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40153361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档