Developpez.com - Qt
X

Choisissez d'abord la catégorieensuite la rubrique :

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

Transparence du réseau

QML supporte la transparence du réseau en utilisant des URL (à la place de noms de fichiers) pour toutes références aux contenus dans un document QML :

 Image {
     source: "http://www.example.com/images/logo.png"
 }

Comme une URL relative est identique à un fichier relatif, le développement avec QML avec des systèmes de fichiers relatifs est identique :

 Image {
     source: "images/logo.png"
 }

La transparence du réseau est supportée à travers QML, par exemple :

  • pour les polices de caractères, la propriété source de FontLoader est une URL ;
  • pour les vues Web, la propriété url de WebView (évidemment !).

Même les types QML eux-mêmes peuvent être sur le réseau - si le visualiseur QML est utilisé pour charger http://example.com/mystuff/Hello.qml et que le contenu pointe sur un type « World », le moteur chargera http://example.com/mystuff/qmldir et trouvera le type comme s'il avait été un fichier local. Par exemple, si le dossier qmldir contient la ligne « World World.qml », il chargera http://example.com/mystuff/World.qml. N'importe quelle ressource que Hello.qml pointe habituellement en utilisant une URL relative sera chargée de la même manière à partir du réseau.

URL relative contre URL absolue

Lorsqu'un objet possède une propriété du type URL (QUrl), la définition d'une chaîne de caractères pour cette propriété définira une URL absolue - en concaténant l'URL du document actuel avec la chaîne de caractères.

Par exemple, voici le contenu de http://example.com/mystuff/test.qml :

 Image {
     source: "images/logo.png"
 }

La propriété source de Image sera http://example.com/mystuff/images/logo.png mais, lorsque le QML a été développé dans le dossier C:\User\Fred\Documents\MyStuff\test.qml (à titre d'exemple), la propriété était C:\User\Fred\Documents\MyStuff\images\logo.png.

Si la chaîne de caractères assignée à une URL est déjà une URL absolue, alors la « résolution » ne la modifie pas et assigne l'URL directement.

Chargement progressif

Comme QML est de nature déclarative et que les ressources réseau sont asynchrones, les objets qui pointent vers des ressources réseau modifient généralement leur état lors du chargement de la ressource distante. Par exemple, une image ayant une source sur le réseau aura la largeur width et la hauteur height à 0, un statut status à Loading ainsi qu'une progression progress à 0.0. Lorsque le contenu se charge, la progression augmentera jusqu'au chargement complet. À ce moment, la largeur width et la hauteur height seront à la taille du contenu et le statut status sera Ready avec la progression progress à 1.0. Les applications peuvent lier ces changements d'état pour fournir des indicateurs de progression là où cela est nécessaire ou simplement lier la largeur width et la hauteur height comme si le contenu était un fichier local, s'adaptant à ces changements de valeurs.

Notez que, lorsque les objets référencent des fichiers locaux, ils possèdent directement le statut Ready, mais les applications souhaitant être transparentes vis-à-vis du réseau ne devraient pas se fier là-dessus. Les prochaines versions de QML pourront utiliser des entrées/sorties asynchrones pour les fichiers locaux afin d'améliorer les performances.

Accéder aux services réseau

Les types QML tels que XmlListModel et les classes JavaScript comme XMLHttpRequest sont prévus pour accéder aux services réseau, lesquelles répondent habituellement avec des références au contenu par des URL utilisables directement dans QML. Par exemple, l'utilisation de ces facilités pour accéder à un service de photographies en ligne fournira à l'application QML les URL pointant sur les photographies, directement assignables à la propriété source de Image.

Voir la démonstration demos/declarative/flickr.

Configuration du gestionnaire d'accès réseau

Tous les accès au réseau à partir de QML sont gérés par un QNetworkAccessManager défini dans le QDeclarativeEngine qui exécute le code QML. Par défaut, il contient un QNetworkAccessManager inchangé. On peut définir un autre gestionnaire en fournissant un QDeclarativeNetworkAccessManagerFactory et en le définissant via QDeclarativeEngine::setNetworkAccessManagerFactory(). Par exemple, le visualiseur QML définit un QDeclarativeNetworkAccessManagerFactory qui crée un QNetworkAccessManager se fiant aux entêtes d'expiration HTTP afin d'éviter les vérifications de cache du réseau, permettant les pipelines HTTP, ajoutant une jarre pour les cookies HTTP, un simple cache disque et supportant le paramétrage de proxy.

Ressource QRC

L'un des schémas URL construits dans Qt est le schéma « qrc ». Celui-ci permet au contenu d'être compilé dans l'exécutable en utilisant le système de ressources Qt. En l'utilisant, une application peut pointer sur du contenu QML qui est compilé dans l'exécutable :

     QDeclarativeView *canvas = new QDeclarativeView;
     canvas->setUrl(QUrl("qrc:/dial.qml"));

Le contenu lui-même peut être alors utilisé en utilisant des URL et donc sans dépendre du fait qu'il a été compilé dans l'exécutable.

Limitations

La commande import est transparente avec le réseau si elle possède une clause « as ».

Plus précisément :

  • import « dossier » ne fonctionne que sur les systèmes de fichiers locaux ;
  • import UriBibliothèque fonctionne seulement sur les systèmes de fichiers locaux ;
  • import « dossier » as D fonctionne aussi bien sur le réseau ;
  • import UriBibliothèque as U fonctionne aussi bien sur le réseau.

Remerciements

Merci à Alexandre Laurent pour la traduction ainsi qu'à Thibaut Cuvelier, Jonathan Courtois 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 © 2018 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 -