Ste*_*nov 23 qt qml qtquick2 qquickview qqmlapplicationengine
我使用QQmlApplicationEngine如下:
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
app.exec();
Run Code Online (Sandbox Code Playgroud)
但现在我想为我的应用程序启用多重采样,并且QQmlApplicationEngine似乎没有setFormat启用多重采样的方法.
我QQmlApplicationEngine 在论坛中找到了一种方法:
QQuickWindow* window = (QQuickWindow*) engine.rootObjects().first();
QSurfaceFormat format;
format.setSamples(16);
window->setFormat(format)
Run Code Online (Sandbox Code Playgroud)
但它依赖于引擎的第一个根对象是a QQuickWindow,这在Qt docs中没有记录.所以我不想使用那种技术.
另一种方法是跳过QQmlApplicationEngine并创建一个QQuickView代替.这确实有一个setFormat让我能多采样方法,但我不知道,我是不可能输给由切换什么QQmlApplicationEngine来QQuickView?
换句话说,这两个类之间有什么区别?
我找到的一个区别是(从这里):
与QQuickView不同,QQmlApplicationEngine不会自动创建根窗口.如果您使用Qt Quick中的可视项目,则需要将它们放在窗口内.
这种特殊的差异对我来说无关紧要.
还有其他差异吗?
Mar*_* Ch 22
标题: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,我们需要:
如果您不希望顶级项目成为a,则可以同时使用它们Window.
QQmlApplicationEngine engine;
QQuickView view(&engine, 0);
// your usual engine code
view.show();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9505 次 |
| 最近记录: |