Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

Qt

Choisissez la catégorie, puis la rubrique :

Viadeo Twitter Facebook Share on Google+   
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

Intégration de QML avec du code d'interface utilisateur Qt existant

Il existe plusieurs façons d'intégrer QML dans des applications graphiques basées sur QWidget, selon les caractéristiques de votre code existant.

Intégration avec une interface utilisateur basée sur QWidget

Si vous avez une interface utilisateur basée sur QWidget, les widgets QML peuvent y être intégrés en utilisant QDeclarativeView. QDeclarativeView est une sous-classe de QWidget donc vous pouvez l'ajouter à votre interface comme tout autre QWidget. Utilisez QDeclarativeView::setSource() pour charger un fichier QML dans la vue, puis ajoutez la vue à votre interface :

 QDeclarativeView *vueQml = new QDeclarativeView;
 vueQml->setSource(QUrl::fromLocalFile("monqml.qml"));
 
 QWidget *widget = monWidgetExistant();
 QVBoxLayout *layout = new QVBoxLayout(widget);
 layout->addWidget(vueQml);

Le seul inconvénient de cette approche est que QDeclarativeView est plus lente à initialiser et utilise plus de mémoire qu'un QWidget, et que créer un grand nombre d'objets QDeclarativeView peut conduire à une dégradation des performances. Si c'est le cas, il peut être préférable de réécrire vos widgets en QML et les charger depuis un widget QML principal au lieu d'utiliser QDeclarativeView.

Gardez à l'esprit que les QWidget ont été conçus pour un type d'interface utilisateur différent de QML, ce n'est donc pas toujours une bonne idée de porter une application basée sur QWidget vers QML. Les QWidgets présentent un meilleur choix si votre UI est constituée d'un petit nombre d'éléments complexes et statiques et QML est un meilleur choix si votre UI est constituée d'un grand nombre d'éléments simples et dynamiques.

Intégration avec une interface utilisateur basée sur QGraphicsView

Ajout de widgets QML à une QGraphicsScene

Si vous avez une interface utilisateur existante basée sur le framework de la vue graphique (Graphics View), vous pouvez intégrer les widgets QML directement dans votre QGraphicsScene. Utilisez QDeclarativeComponent pour créer un QGraphicsObject depuis un fichier QML et placez l'objet graphique dans votre scène en utilisant QGraphicsScene::addItem() ou déclarez-le comme enfant d'un élément déjà présent dans la QGraphicsScene.

Par exemple :

 QGraphicsScene* scene = myExistingGraphicsScene();
 QDeclarativeEngine *moteur = new QDeclarativeEngine;
 QDeclarativeComponent composant(moteur, QUrl::fromLocalFile("monqml.qml"));
 QGraphicsObject *objet =
     qobject_cast<QGraphicsObject *>(composant.create());
 scène->addItem(objet);

Les options de QGraphicsView suivantes sont recommandées pour une performance optimale des interfaces utilisateur QML :

Chargement des objets QGraphicsWidget dans QML

Une approche alternative est d'exposer vos objets QGraphicsWidget existants à QML et de construire votre scène en QML. Voir l'exemple de mise en forme graphique qui montre comment exposer les classes graphiques de Qt à QML afin d'utiliser QGraphicsWidget avec des classes comme QGraphicsLinearLayout et QGraphicsGridLayout.

Pour exposer vos classes QGraphicsWidget existantes à QML, utilisez qmlRegisterType(). Voir étendre QML en C++ pour plus d'informations sur l'utilisation de types C++ en QML.

Remerciements

Merci à Houssem Lamti pour la traduction ainsi qu'à Ilya Diallo, Jonathan Courtois, Thibaut Cuvelier et Claude Leloup pour leur relecture !

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 4.7
Copyright © 2020 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur, une redirection cassée ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
Responsable bénévole de la rubrique Qt : Thibaut Cuvelier -

Partenaire : Hébergement Web