Sur cette page

Qt Data Visualization Traitement des données

Séries

Une série est une combinaison d'un ensemble d'éléments de données logiquement connectés (gérés par un proxy de données) et de propriétés visuelles qui décrivent comment les éléments de données doivent être rendus, tels que les maillages et les couleurs des éléments. Chaque type de visualisation possède son propre type de série. Par exemple, les graphiques à barres utilisent QBar3DSeries. Tous les graphiques peuvent avoir plusieurs séries ajoutées simultanément.

Cet extrait de code montre comment utiliser QBar3DSeries pour rendre les barres sous forme de cylindres et avec un dégradé au lieu d'une couleur uniforme :

Q3DBars graph;
QBar3DSeries *series = new QBar3DSeries;
QLinearGradient barGradient(0, 0, 1, 100);
barGradient.setColorAt(1.0, Qt::white);
barGradient.setColorAt(0.0, Qt::black);

series->setBaseGradient(barGradient);
series->setColorStyle(Q3DTheme::ColorStyleObjectGradient);
series->setMesh(QAbstract3DSeries::MeshCylinder);

graph->addSeries(series);

Données de substitution

Les données que les utilisateurs souhaitent visualiser se présentent sous de nombreux formats, qui ne peuvent évidemment pas tous être pris en charge directement. C'est pourquoi Qt Data Visualization implémente des proxy de données dans lesquels l'utilisateur peut introduire ses données dans un format connu. Chaque type de visualisation possède un type de proxy de base, qui prend les données dans un format adapté à cette visualisation. Par exemple, le proxy de base pour QBar3DSeries est QBarDataProxy, qui stocke des lignes d'objets QBarDataItem. Chaque QBarDataItem stocke une seule valeur de barre. Des typedefs supplémentaires sont fournis pour les conteneurs QBarDataArray et QBarDataRow.

Cet extrait de code montre comment utiliser le proxy de base lorsque vos données sont stockées dans un objet hypothétique myData:

Q3DBars graph;
QBarDataProxy *newProxy = new QBarDataProxy;

QBarDataArray *dataArray = new QBarDataArray;
dataArray->reserve(10);
for (int i = 0; i < 10; i++) {
    QBarDataRow *dataRow = new QBarDataRow(5);
    for (int j = 0; j < 5; j++)
        (*dataRow)[j].setValue(myData->getValue(i, j));
    dataArray->append(dataRow);
}

newProxy->resetArray(dataArray);
graph->addSeries(new QBar3DSeries(newProxy));

Remarque : les objets de la série ne peuvent posséder qu'un seul proxy à la fois. Le proxy existant est supprimé lorsqu'un autre est attribué à la série. Les graphiques peuvent toutefois contenir plusieurs séries. Si vous devez passer d'un ensemble de données à l'autre, il est généralement plus efficace de stocker chaque ensemble dans une série différente et de changer de série, plutôt que de réinitialiser les données dans un proxy à chaque fois que vous devez passer d'un ensemble à l'autre.

Modèles d'éléments et mappage des données

Pour les cas d'utilisation courants, Qt Data Visualization propose des mandataires spécialisés. L'un de ces cas est la présence de données dans un modèle d'élément (sous-classeQAbstractItemModel ), qui est un moyen courant de stocker des données dans les applications Qt. Chacun des types de visualisation propose une classe proxy spéciale à cet effet, par exemple, QItemModelBarDataProxy pour QBar3DSeries. Ces mandataires sont simples à utiliser : il suffit de leur donner un pointeur sur le modèle d'élément contenant les données et les règles de mise en correspondance des données dans un format que le mandataire de base peut assimiler.

Le mappage fonctionne avec les rôles du modèle d'élément. Chaque élément de données du modèle peut avoir des valeurs différentes pour des rôles différents. Par exemple, avec QItemModelBarDataProxy, vous pouvez spécifier quel rôle est utilisé pour déterminer à quelle ligne l'élément appartient, quel rôle fait de même pour les colonnes et quel rôle spécifie la valeur de l'élément. Lorsque le proxy résout les données du modèle, il utilise ces correspondances pour générer les lignes et les colonnes du graphique à barres.

Souvent, les modèles d'éléments ont un seul rôle qui contient des informations que vous souhaitez associer à plusieurs valeurs. Un exemple typique est un champ d'horodatage lors de la génération d'un graphique à barres avec deux axes liés au temps, par exemple les années et les mois. Pour permettre la mise en correspondance d'un rôle de modèle d'élément unique avec plusieurs champs de données, les mandataires de modèle d'élément fournissent un mécanisme de correspondance et de remplacement des modèles. Vous pouvez également utiliser ce mécanisme pour reformater les données même dans les cas de mappage un à un.

Selon le type de visualisation, les mandataires peuvent également prendre en charge d'autres fonctionnalités, telles que QItemModelBarDataProxy, qui permet de mapper les lignes et les colonnes de QAbstractItemModel directement en lignes et en colonnes de diagramme à barres.

Pour plus d'informations et d'exemples d'utilisation, voir les classes de mandataires individuelles : QItemModelBarDataProxy, QItemModelScatterDataProxy, et QItemModelSurfaceDataProxy.

Autres mandataires personnalisés

QHeightMapSurfaceDataProxy est un proxy spécialisé dans la génération d'un graphique de surface à partir d'une image de carte de hauteur. Voir la documentation de QHeightMapSurfaceDataProxy pour plus d'informations.

L'exemple de la galerie graphique montre comment un proxy personnalisé peut être créé, sous l'onglet Bar Graph. Il définit un ensemble de données personnalisé basé sur des listes de variantes et une extension du proxy de base pour résoudre ces données avec un mappeur associé.

Traitement des données en temps réel

Lorsque vous disposez d'un ensemble de données qui se met à jour rapidement, il est important de traiter les données correctement pour garantir de bonnes performances. L'allocation de mémoire étant une opération coûteuse, utilisez toujours QList::reserve() et QList::resize() dans la mesure du possible pour éviter les réallocations inutiles lors de la construction du tableau à fournir au proxy. Si vous devez modifier l'ensemble des données pour chaque image, il est préférable, dans la plupart des cas, de réutiliser le tableau existant - surtout si les dimensions du tableau ne changent pas. Si vous devez ajouter, insérer, supprimer ou modifier plusieurs lignes ou éléments pour chaque image, il est toujours plus efficace de le faire en appelant une seule méthode plutôt que plusieurs appels affectant chacun une seule ligne ou un seul élément. Par exemple, l'ajout de dix lignes par un seul appel à QBarDataProxy::addRows() est beaucoup plus efficace que dix appels distincts à QBarDataProxy::addRow().

Le moteur de rendu Bars est optimisé pour n'accéder qu'aux données qui se trouvent dans la fenêtre de données et ne devrait donc pas subir de ralentissement notable, même si des données sont continuellement ajoutées au proxy.

En raison de la nature non triée des données de dispersion, tout changement dans les plages de la fenêtre de données nécessite la vérification de la visibilité de tous les points de données, ce qui peut entraîner un ralentissement croissant si des données sont continuellement ajoutées au proxy. Pour obtenir les meilleures performances avec les graphiques de dispersion, ne conservez dans le proxy que les données dont vous avez besoin.

Les données de surface, bien qu'elles soient similaires aux données de dispersion au niveau de l'élément, sont déjà assignées à des lignes et à des colonnes, de sorte que le moteur de rendu de surface peut optimiser le dessin en supposant que les données des lignes et des colonnes sont triées le long de leurs axes respectifs. Ce n'est pas aussi efficace que dans le cas des barres, mais presque.

© 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.