我使用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不会自动创建根窗口。如果您正在使用QtQuick中的可视项,则需要将它们放置在窗口中。
这个特别的区别对我来说并不重要。
还有什么不同吗?
发布于 2016-10-26 20:24:02
标题: QQmlApplicationEngine比QQuickView更新,功能更强大。
QQmlApplicationEngine向QML公开了一些中心应用程序功能,QQuickView应用程序通常会从C++中控制这些功能:
参考文献:Qt文档
在引入QQmlApplicationEngine时,Qt博客有这样的说法
在Qt5.0中,我们通常通过在QQuickView中声明C++并在其上设置基本url来创建QQuickView。这种方法的缺点是您必须使用C++来设置诸如宽度、高度等属性。在QT5.1中,我们鼓励使用窗口或ApplicationWindow作为应用程序的根项,从而完全控制QtQuick,因此我们现在引入QQmlApplicationEngine,使这个用例变得简单一些。QmlApplicationEngine是设置qt快速窗口、获取正确的转换文件所需的全部内容,它将应用程序退出()信号隐式连接到根窗口。
QtQuickControls2.0可以通过新项ApplicationWindow利用这个额外的应用程序控件,它:
因此,为了使用Qt快速控件的一些特性,如MenuBar和弹出,我们需要:
发布于 2016-10-22 16:09:15
如果不希望顶级项成为Window,则可以同时使用这两种方法。
QQmlApplicationEngine engine;
QQuickView view(&engine, 0);
// your usual engine code
view.show();https://stackoverflow.com/questions/40153361
复制相似问题