API QML Places
Vue d'ensemble
L'API Lieux permet aux utilisateurs de découvrir des lieux d'intérêt et d'en afficher les détails, tels que l'adresse et les coordonnées. Certains lieux peuvent être associés à un contenu supplémentaire, tel que des images et des commentaires. L'API Lieux vous permet également de gérer les lieux et les catégories, en les enregistrant et en les supprimant. Les lieux peuvent également inclure des chemins, des routes ou des moyens de transport, ce qui permet d'optimiser la navigation et de fournir une assistance. Pour plus d'informations sur la navigation, voir routes.
Concepts d'introduction
Plugin
Un Plugin est une abstraction pour un backend. Un Plugin peut accéder à des lieux à partir d'un serveur REST, tandis qu'un autre peut accéder à des lieux à partir d'une base de données locale. Ce qui suit instancie un objet Plugin en lui donnant le nom "osm". Le nom Plugin identifie le backend à choisir. Les plugins peuvent également être dotés d'un ensemble de parameters, qui prend essentiellement la forme d'un ensemble de paires clé-valeur. Les parameters qui peuvent être spécifiés varient selon les différents backends Plugin. Pour obtenir de la documentation sur les parameters possibles et les nuances de chaque Plugin, voir les références des plugins.
Plugin { id: myPlugin name: "osm" //specify plugin parameters as necessary //PluginParameter {...} //PluginParameter {...} //... }
Modèles, vues et délégués
L'API QML Places s'articule autour de la notion de modèles, de vues et de délégués.
| Modèle | Un modèle contient des éléments de données et maintient leur structure. Le modèle est également responsable de la récupération des éléments à partir d'une source de données. |
| Vue | Une vue est un conteneur visuel qui affiche les données et gère la manière dont les éléments visuels sont affichés, par exemple dans une liste ou une grille. La vue peut également être responsable de la navigation dans les données, par exemple en faisant défiler les éléments visuels au cours d'un mouvement de bascule. |
| Délégué | Un délégué définit la manière dont les éléments de données individuels doivent apparaître en tant qu'éléments visuels dans la vue. Les modèles exposent un ensemble de rôles de données et le délégué les utilise pour construire un élément visuel. Le délégué peut également définir un comportement tel qu'une opération à invoquer lorsqu'un élément visuel est cliqué. |
La section Cas d'utilisation courante ci-dessous présente des exemples concrets de la manière dont ces concepts s'articulent.
Cas d'utilisation courants
Recherche de lieux
La recherche s'effectue par l'intermédiaire de la propriété PlaceSearchModel. La propriété plugin spécifie le backend avec lequel les opérations de recherche doivent être effectuées. Les paramètres de recherche peuvent être fournis par des propriétés telles que searchTerm et searchArea. Une opération de recherche peut alors être lancée en invoquant la méthode update(). Par souci de simplicité, l'extrait ci-dessous invoque la méthode update() une fois la construction du modèle achevée ; en règle générale, la méthode update() serait invoquée en réponse à une action de l'utilisateur telle qu'un clic sur un bouton. Pendant l'opération de recherche, la propriété PlaceSearchModel::status passe à l'état Loading et, une fois la recherche terminée, à l'état Ready.
PlaceSearchModel { id: searchModel plugin: myPlugin searchTerm: "food" searchArea: QtPositioning.circle(startCoordinate, 5000 /* 5 km radius */); Component.onCompleted: update() }
Affichage des résultats de la recherche à l'aide d'une liste déroulante
Une page ListView peut être utilisée pour afficher les résultats de la recherche trouvés par le modèle. Il définit la région visuelle dans laquelle les résultats sont affichés et, dans le cas ci-dessous, il remplit la totalité de son parent. Le site ListView a un comportement intégré qui permet à la région de répondre aux événements de défilement et de défiler de manière appropriée.
Dans l'extrait ci-dessous, le modèle de recherche a été affecté à la propriété model de ListView. Lorsque le modèle est mis à jour avec de nouveaux résultats, le site ListView est automatiquement mis à jour pour refléter les nouveaux éléments de données du modèle.
Un simple délégué a été lié à la propriété ListView's delegate. Le site PlaceSearchModel expose un ensemble de roles dont les rôles title et place ont été utilisés ci-dessous, ceux-ci étant respectivement de type string et Place. Essentiellement, pour chaque élément de données qui doit être visible dans la vue, la vue invoque le délégué pour créer une représentation visuelle de l'élément.
![]() |
Remarque : par souci de simplicité, nous avons supposé que chaque résultat de recherche est de type type PlaceSearchResult et qu'il a donc toujours accès au rôle place.
Voir l'exemple de la liste des lieux pour le code source complet.
Affichage des résultats de recherche à l'aide d'un MapItemView
Au lieu d'un ListView, le PlaceSearchModel peut être utilisé en conjonction avec un MapItemView pour afficher des marqueurs sur une carte. Tout d'abord, un Map est utilisé pour définir la région visuelle occupée par la carte, dans ce cas, elle remplit l'intégralité de son parent. D'autres propriétés sont spécifiées, telles que le site plugin qui fournit les cartes et les sites center et zoomLevel de la carte.
À l'intérieur du site Map, un site MapItemView est déclaré, dont la propriété model a été définie comme étant le modèle de recherche, et un site delegate composé d'un site MapQuickItem est utilisé pour afficher l'image d'un marqueur. Un marqueur est affiché pour chaque lieu trouvé par le modèle de recherche. Le délégué utilise le rôle place pour positionner le marqueur.
MapView { id: view anchors.fill: parent map.plugin: myPlugin; map.center: positionSource.lastSearchPosition map.zoomLevel: 13 MapItemView { model: searchModel parent: view.map delegate: MapQuickItem { coordinate: place.location.coordinate anchorPoint.x: image.width * 0.5 anchorPoint.y: image.height sourceItem: Column { Image { id: image; source: "marker.png" } Text { text: title; font.bold: true } } } } } | ![]() |
Remarque : par souci de simplicité, nous avons supposé que chaque résultat de recherche est de type type PlaceSearchResult et qu'il a donc toujours accès au rôle place; d'autres types de résultats de recherche peuvent ne pas avoir de rôle place.
Voir l'exemple de la carte des lieux pour le code source complet.
Récupération des détails d'un lieu
Afin d'économiser de la bande passante, il arrive qu'un backend ne renvoie que les lieux dont les détails sont partiellement renseignés. Ceci peut être vérifié avec la propriété Place::detailsFetched qui indique si tous les détails disponibles ont été récupérés ou non. Si ce n'est pas le cas, la méthode Place::getDetails() peut être invoquée pour récupérer les détails restants.
if (!place.detailsFetched) place.getDetails();
Sauvegarde et suppression de lieux
Certains backends peuvent prendre en charge l'enregistrement et la suppression de lieux. Pour ce faire, il suffit d'appeler les méthodes Place::save() et Place::remove() respectivement. Notez que pour sauvegarder un Place, un Plugin doit être attribué pour spécifier le backend dans lequel nous sauvegardons. La propriété status passera à l'état Saving pendant que l'opération de sauvegarde se déroule et, une fois l'opération terminée, passera à l'état Ready. L'extrait suivant montre comment sauvegarder et supprimer un lieu à l'aide de javascript.
//creating and saving a place var place = Qt.createQmlObject('import QtLocation; Place { }', parent); place.plugin = myPlugin; place.name = "New York"; place.location.coordinate.latitude = 40.7 place.location.coordinate.longitude = -74.0 place.save(); //removing a place place.remove();
En savoir plus
Les extraits ci-dessus ne présentent qu'un petit sous-ensemble des fonctionnalités de Places. Reportez-vous aux types de lieux présentés ci-dessous pour un contenu plus riche tel que images, reviews etc, ainsi que pour des descriptions et des explications plus approfondies.
Voir également l'exemple Places (QML) pour une démonstration plus complète de l'utilisation de l'API.
Types de lieux
Types de données
Type représente une catégorie à laquelle un lieu peut être associé | |
Type contient les coordonnées d'un lieu | |
Le type contient des données supplémentaires sur un lieu | |
Le type représente un lieu qui est une position d'intérêt | |
Le type contient un détail de contact tel qu'un numéro de téléphone ou une adresse de site web | |
Type représente l'icône d'un lieu | |
Le type contient des informations génériques sur les attributs d'un lieu | |
Le type contient des informations sur l'évaluation du lieu | |
Contient des données relatives au fournisseur d'un lieu, à l'image d'un lieu, à une critique ou à un éditorial. | |
Type identifie un utilisateur qui a contribué à un élément de contenu particulier d'un lieu. |
Modèles
Type fournit un modèle des catégories prises en charge par un plugin | |
Type fournit un modèle d'éditoriaux de lieux | |
Le type fournit un modèle d'images de lieux | |
Permet d'accéder aux résultats de recherche d'un lieu | |
Permet d'accéder aux suggestions de termes de recherche | |
Type fournit un modèle de critiques de lieux |
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.

