J'utilise QQmlApplicationEngine
comme suit:
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
app.exec();
Mais maintenant, je veux activer le multi-échantillonnage pour mon application, et QQmlApplicationEngine
ne semble pas avoir de méthode setFormat
pour activer le multi-échantillonnage.
J'ai trouvé un moyen de le faire avec un QQmlApplicationEngine
dans un forum :
QQuickWindow* window = (QQuickWindow*) engine.rootObjects().first();
QSurfaceFormat format;
format.setSamples(16);
window->setFormat(format)
Mais il repose sur le premier objet racine du moteur étant un QQuickWindow
, ce qui n'est pas documenté dans les documents Qt. Je ne veux donc pas utiliser cette technique.
Une autre façon serait de sauter QQmlApplicationEngine
et de créer un QQuickView
à la place. Cela a une méthode setFormat
me permettant d'activer le multi-échantillonnage, mais je me demande, est-ce que je perds quelque chose en passant de QQmlApplicationEngine
à QQuickView
?
En d'autres termes, quelles sont les différences entre ces deux classes?
Une différence que j'ai trouvée est la suivante (de ici ):
Contrairement à QQuickView, QQmlApplicationEngine ne crée pas automatiquement une fenêtre racine. Si vous utilisez des éléments visuels de Qt Quick, vous devrez les placer à l'intérieur d'une fenêtre.
Cette différence particulière n'a pas d'importance pour moi.
D'autres différences?
Titre: QQmlApplicationEngine est plus récent et plus puissant que QQuickView.
QQmlApplicationEngine expose certaines fonctionnalités de l'application centrale à QML, que l'application QQuickView contrôlerait normalement à partir de C++:
- Connexion de Qt.quit () à QCoreApplication :: quit ()
- Charge automatiquement les fichiers de traduction à partir d'un répertoire i18n adjacent au fichier QML principal.
- Définit automatiquement un contrôleur d'incubation si la scène contient un QQuickWindow.
- Définit automatiquement un QQmlFileSelector comme intercepteur d'URL, en appliquant des sélecteurs de fichiers à tous les fichiers et ressources QML.
Réf: Qt docs
Au moment où QQmlApplicationEngine a été introduit, le Qt Blog avait ceci à dire :
Dans Qt 5.0, nous avons généralement créé des applications Qt Quick en déclarant un QQuickView en C++ et en définissant l'URL de base sur celui-ci. L'inconvénient de cette approche est que vous devez utiliser C++ pour définir des propriétés telles que la largeur, la hauteur, etc. Dans Qt 5.1, nous encourageons l'utilisation de Window ou ApplicationWindow comme élément racine de votre application, donnant un contrôle complet à Qt Quick, nous introduisons donc maintenant QQmlApplicationEngine pour rendre ce cas d'utilisation un peu plus simple. Le QmlApplicationEngine est tout ce dont vous avez besoin pour configurer votre fenêtre rapide qt, récupérer les bons fichiers de traduction et il connecte implicitement le signal de l'application quit () à votre fenêtre racine.
Qt Quick Controls 2.0 est capable d'utiliser ce contrôle d'application supplémentaire, via le nouvel élément ApplicationWindow , qui:
Donc, pour utiliser certaines des fonctionnalités de Qt Quick Controls comme MenuBar et Popup, nous devons:
Vous pouvez utiliser les deux ensemble si vous ne voulez pas que votre élément de niveau supérieur soit un Window
.
QQmlApplicationEngine engine;
QQuickView view(&engine, 0);
// your usual engine code
view.show();