Qt Data Visualization Traitement des données
Série
Une série est une combinaison d'un ensemble d'éléments de données logiquement liés (gérés par un proxy de données) et de propriétés visuelles décrivant la manière dont ces éléments doivent être affichés, telles que les maillages et les couleurs. Chaque type de visualisation dispose de son propre type de série. Par exemple, les graphiques à barres utilisent QBar3DSeries. Tous les graphiques peuvent comporter plusieurs séries ajoutées simultanément.
Cet extrait de code montre comment utiliser QBar3DSeries pour afficher les barres sous forme de cylindres et avec un dégradé plutôt qu’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);Proxys de données
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 met en œuvre des proxys de données dans lesquels l'utilisateur peut injecter ses données dans un format connu. Chaque type de visualisation dispose d’un type de proxy de base, qui accepte 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 la valeur d’un seul histogramme. Des typedefs supplémentaires sont fournis pour les conteneurs « QBarDataArray » et « QBarDataRow ».
Cet extrait de code montre comment utiliser un proxy de base lorsque vos données sont stockées dans un objet hypothétique de type ` 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 objetsSeries ne peuvent posséder qu’un seul proxy à la fois. Le proxy existant est supprimé lorsqu’un autre est associé à la série. Les graphiques peuvent toutefois contenir plusieurs séries. Si vous devez basculer entre deux ensembles de données différents, il est généralement plus efficace de stocker chaque ensemble dans une série distincte et de simplement changer de série, plutôt que de réinitialiser les données d’un même proxy à chaque fois que vous devez effectuer ce changement.
Modèles d’éléments et mappage des données
Pour les cas d’utilisation courants, Qt Data Visualization propose des proxys spécialisés. C’est notamment le cas lorsque les données sont stockées dans un modèle d’élément (sous-classe deQAbstractItemModel ), ce qui est une méthode courante de stockage des données dans les applications Qt. Chaque type de visualisation propose une classe de proxy spécifique à cet effet, par exemple QItemModelBarDataProxy pour QBar3DSeries. Ces proxys sont simples à utiliser : il suffit de leur fournir un pointeur vers le modèle d’élément contenant les données, ainsi que les règles de mappage permettant de convertir les données dans un format que le proxy de base peut traiter.
Le mappage s'effectue à l'aide des rôles du modèle d'éléments. Chaque élément de données du modèle peut avoir des valeurs différentes selon les rôles. Par exemple, avec QItemModelBarDataProxy, vous pouvez spécifier quel rôle sert à déterminer la ligne à laquelle 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 interprète les données du modèle, il utilise ces mappages pour générer les lignes et les colonnes du graphique à barres.
Souvent, les modèles d’éléments comportent un seul rôle contenant des informations que vous souhaitez mapper à plusieurs valeurs. Un exemple typique est celui d’un champ d’horodatage lors de la génération d’un graphique à barres avec deux axes temporels, par exemple les années et les mois. Pour permettre le mappage d’un seul rôle de modèle d’élément à plusieurs champs de données, les proxys de modèle d’élément fournissent un mécanisme de correspondance de motifs et de remplacement. 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 proxys peuvent également prendre en charge d’autres fonctionnalités, comme le QItemModelBarDataProxy qui permet, en option, de mapper directement les lignes et colonnes d’ QAbstractItemModel s vers les lignes et colonnes d’un graphique à barres.
Pour plus d’informations et des exemples d’utilisation, consultez les classes de proxys individuelles : QItemModelBarDataProxy, QItemModelScatterDataProxy et QItemModelSurfaceDataProxy.
Autres proxys personnalisés
QHeightMapSurfaceDataProxy est un proxy spécialisé permettant de générer un graphique de surface à partir d’une image de carte d’altitude. Consultez la documentation de QHeightMapSurfaceDataProxy pour plus d’informations.
L’exemple « Graph Gallery » montre comment créer un proxy personnalisé, 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 à l’aide d’un mappeur associé.
Gestion des données en temps réel
Lorsque vous disposez d'un ensemble de données qui s'actualise rapidement, il est important de gérer correctement ces données 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 afin d'éviter des réallocations inutiles lors de la construction du tableau à fournir au proxy. Si vous devez modifier l’ensemble des données pour chaque trame, il est dans la plupart des cas préférable de réutiliser le tableau existant, en particulier si les dimensions du tableau ne changent pas. Si vous devez ajouter, insérer, supprimer ou modifier plusieurs lignes ou éléments à chaque image, il est toujours plus efficace de le faire en un seul appel de méthode plutôt qu’en plusieurs appels affectant chacun une seule ligne ou un seul élément. Par exemple, ajouter dix lignes avec un seul appel à QBarDataProxy::addRows() est bien plus efficace que dix appels distincts à QBarDataProxy::addRow().
Le moteur de rendu des barres est optimisé pour n’accéder qu’aux données se trouvant dans la fenêtre de données et ne devrait donc pas subir de ralentissement notable, même si davantage de données sont continuellement ajoutées au proxy.
En raison de la nature non triée des données de nuage de points, toute modification des plages de la fenêtre de données nécessite de vérifier 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 nuage de points, ne conservez dans le proxy que les données dont vous avez besoin.
Les données de surface, bien que similaires aux données de nuage de points au niveau des éléments, sont déjà réparties en lignes et en colonnes ; le moteur de rendu de surface peut donc optimiser le tracé en partant du principe que les données des lignes et des colonnes sont triées selon leurs axes respectifs. Ce n’est pas tout à fait 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.