Tableau de bord des éoliennes
Tableau de bord d'une éolienne avec des graphiques 2D et 3D.
L'exemple de tableau de bord d'une éolienne montre comment utiliser des graphiques 2D et 3D dans une application réelle simulée.

Exécution de l'exemple
Pour exécuter l'exemple à partir de Qt CreatorOuvrez le mode Welcome et sélectionnez l'exemple à partir de Examples. Pour plus d'informations, voir Qt Creator: Tutoriel : Construire et exécuter.
Présentation de l'application
L'exemple présente un tableau de bord de surveillance d'une éolienne, appelé Aerospace Hub, qui affiche des données simulées provenant d'un champ d'éoliennes imaginaire. Plusieurs types de graphiques sont utilisés pour visualiser différents types de données. Par exemple, un graphique en 2D avec une série de splines illustre la production d'énergie horaire, tandis qu'une série d'aires d'accompagnement représente la puissance accumulée au cours de la même période. Plusieurs vues de données sont disponibles, ce qui permet aux utilisateurs d'explorer et d'analyser les informations sous différentes perspectives.
L'interface principale comporte une barre d'outils de paramétrage sur la gauche. Selon le mode sélectionné, la présentation peut inclure un volet d'état, un tableau de bord de petits graphiques, un grand graphique principal ou un panneau de paramètres détaillés - individuellement ou en combinaison. Cette conception flexible permet aux utilisateurs de personnaliser leur vue et de se concentrer sur les données les plus pertinentes pour leur analyse en cours.
Vue du tableau de bord
La vue tableau de bord présente l'état actuel du système à côté d'un panneau déroulant qui affiche des aperçus miniatures des différents graphiques. Jusqu'à quatre graphiques sont affichés simultanément, ce qui permet aux utilisateurs de parcourir facilement les six visualisations disponibles et d'évaluer rapidement les principales mesures de performance en un coup d'œil.

Vue détaillée
La vue détaillée, accessible en sélectionnant un graphique miniature dans le tableau de bord, permet aux utilisateurs d'examiner la visualisation choisie plus en profondeur et à plus grande échelle. Selon le type de graphique, les utilisateurs peuvent zoomer, faire un panoramique ou faire pivoter la vue pour explorer les données de manière interactive. En outre, il est possible de survoler ou de cliquer sur des points de données individuels pour obtenir des informations plus détaillées sur l'élément en question.

Vue des paramètres
La vue des paramètres, accessible en cliquant sur le bouton des paramètres dans la barre d'outils ou dans un graphique miniature, permet aux utilisateurs d'ajuster le thème visuel des graphiques et de modifier les paramètres spécifiques à chaque type de graphique. Certaines configurations persistent après avoir quitté la vue des paramètres, tandis que d'autres ne s'appliquent qu'à la vue actuelle, ce qui permet de procéder à des ajustements temporaires ou permanents.

Détails de la mise en œuvre
Tous les éléments de l'application ont été conçus de manière modulaire. La vue principale, qui est le fichier Main.qml, est une ApplicationWindow, qui instancie les simulateurs de données pour chaque graphique, ainsi que la racine Item contenant tous les éléments de l'interface utilisateur.
Le fichier FontLoader est utilisé pour appliquer une police globale à l'ensemble de l'interface utilisateur.
ApplicationWindow {
...
FontLoader { ... }
font.family: interFont.name
// Data simulators
PieSimulator {
id: piesim
...
}
BarSimulator {
id: barsim
...
}
LineSimulator {
id: linesim
...
}
Data3DSimulator {
id: barDataSimulator
...
}
Data3DSimulator {
id: scatterDataSimulator
...
}
Data3DSimulator {
id: surfaceDataSimulator
...
}
// Root item
Item {...}
}L'élément racine contient les graphiques d'arrière-plan et un Layout qui gère le placement de chaque élément de l'interface utilisateur dans la vue :
// Background image Image { anchors.fill: parent source: root.state === "ShowSettings" ? "images/settings-bg.png" : "images/dashboard-bg.png" fillMode: Image.PreserveAspectCrop } // Everything except background image ColumnLayout { anchors.fill: parent ...
La plupart des éléments ont été retirés du fichier Main.qml pour être intégrés dans leurs propres composants QML à utiliser dans les présentations, comme le ToolBarItem dans l'extrait ci-dessous :
// Vertical toolbar ToolBarItem { Layout.preferredWidth: GlobalSettings.toolbarwidth Layout.fillHeight: true } // Everything except vertical toolbar, header, and background image ColumnLayout { id: maincontentview Layout.fillWidth: true Layout.fillHeight: true ...
Les transitions entre les différentes vues sont gérées à l'aide de states et transitions:
states: [ State { name: "ShowDashboard" }, State { name: "ShowSettings" PropertyChanges { maincontent.opacity: 0 settingscontent.opacity: 1 } PropertyChanges { viewtextdesc.text: "/ Settings" } }, ... // Use transitions to bring the selected view to the front transitions: [ Transition { NumberAnimation { properties: "opacity" easing.type: Easing.InOutCubic duration: 1000 } } ]
Tableau de bord
Le tableau de bord fait partie du contenu principal, un autre RowLayout à l'intérieur de la hiérarchie Layout:
// Main content RowLayout { id: maincontent Layout.fillWidth: true Layout.fillHeight: true ...
Il se compose d'un volet d'état et d'un volet de tableau de bord :
// Status area; turbine image, notification, status texts, and turbine name StatusPane { id: statuspane Layout.preferredWidth: GlobalSettings.statusimagewidth Layout.fillHeight: true } // Scrollable dashboard graph area, shown when in ShowDashboard state DashboardPane { id: dashboardpane contentheight: statuspane.height * 1.5 Layout.preferredWidth: GlobalSettings.dashboardwidth Layout.fillHeight: true }
Volet d'état
Le volet d'état est également constitué d'éléments plus petits, implémentés dans leurs propres composants QML :
// Masking the turbine image of the background image ImageItem { anchors.fill: parent } // Notification NotificationItem { anchors.top: turbineimage.top anchors.horizontalCenter: turbineimage.horizontalCenter anchors.topMargin: GlobalSettings.doublespacing width: turbineimage.width / 1.25 } // Status StatusItem { anchors.centerIn: turbineimage width: turbineimage.width / 1.5 height: turbineimage.width / 1.75 } // Turbine name Label { ...
L'implémentation de ces éléments n'étant pas pertinente, cette partie sera sautée.
Volet tableau de bord
Le tableau de bord est l'élément qui contient les six petits aperçus de graphiques. Seuls quatre d'entre eux sont visibles à la fois, ils doivent donc être ajoutés à l'intérieur d'un élément qui peut être déroulé. Dans ce cas, il s'agit d'un élément Flickable, qui contient un élément GridLayout:
Flickable { property alias contentheight: content.height clip: true contentHeight: contentheight boundsBehavior: Flickable.StopAtBounds interactive: true visible: opacity > 0.5 Item { id: content width: parent.width GridLayout { id: grid columns: 2 ...
Les aperçus des graphiques sont ajoutés à la grille, et comme la plupart des autres éléments, ils ont été implémentés à l'intérieur de leurs propres éléments :
// Graph 1: Power output over time SmallGraphItem { Layout.fillWidth: true Layout.fillHeight: true state: "Area2D" linesimulator: linesim } // Graph 2: Energy production x Turbine SmallGraphItem { Layout.fillWidth: true Layout.fillHeight: true state: "Bar2D" barsimulator: barsim } ...
L'élément SmallGraphItem est un élément générique, qui contient tous les types de graphes différents, et le type requis lui est donné sous la forme d'un élément state.
L'élément SmallGraphItem possède :
- un élément d'en-tête
- Une instance de chaque type de graphique, dont la visibilité est fixée à false par défaut à l'aide d'un déclencheur d'opacité.
- Un rectangle pour assombrir l'aperçu
- Une zone de souris pour gérer les survols et les clics de souris sur l'aperçu.
Pie2DGraph { id: pie2d anchors.topMargin: header.height + GlobalSettings.defaultspacing anchors.rightMargin: GlobalSettings.defaultspacing anchors.fill: parent opacity: 0 piesimulator: smallgraph.piesimulator } Bar3DGraph { id: bar3d anchors.topMargin: header.height + GlobalSettings.defaultspacing anchors.bottomMargin: GlobalSettings.defaultspacing anchors.fill: parent opacity: 0 cameraZoomLevel: GlobalSettings.defaultzoom cameraPreset: GlobalSettings.defaultpreset } ...
Les opacités sont utilisées pour les animations de transition, c'est pourquoi elles ont été fixées par défaut à 0 dans les aperçus. Lorsque l'opacité est animée au-delà de 0,5, le graphique de prévisualisation lui-même devient visible :
Bars3D { id: graph visible: opacity > 0.5 ...
Détails
Les détails font également partie du contenu principal et utilisent le même site RowLayout dans la hiérarchie Layout. Il se compose du même volet d'état que le tableau de bord et d'un volet de détails :
// Details graph, shown when in correct state BigGraphItem { id: detailspane Layout.preferredWidth: GlobalSettings.dashboardwidth Layout.fillHeight: true state: root.state radius: GlobalSettings.defaultradius piesimulator: piesim barsimulator: barsim linesimulator: linesim detailsview: true }
Le volet de détails, BigGraphItem, est similaire au volet SmallGraphItem en ce sens qu'il contient également une instance de chaque graphique, en plus d'autres éléments :
// Graphs Area2DGraph { id: area2dbig Layout.fillWidth: true Layout.fillHeight: true Layout.margins: GlobalSettings.defaultmargin opacity: 0 panStyle: GraphsView.PanStyle.Drag zoomStyle: GraphsView.ZoomStyle.Center linesimulator: biggraph.linesimulator onVisibleChanged: { if (visible) biggraph.activegraph = area2dbig } } Bar2DGraph { id: bar2dbig Layout.fillWidth: true Layout.fillHeight: true Layout.margins: GlobalSettings.defaultmargin opacity: 0 panStyle: GraphsView.PanStyle.Drag zoomStyle: GraphsView.ZoomStyle.Center barsimulator: biggraph.barsimulator onVisibleChanged: { if (visible) biggraph.activegraph = bar2dbig } } ...
Les autres éléments inclus sont une boîte combobox déroulante pour sélectionner le type de graphique, des boutons de contrôle pour la rotation, le panoramique et le zoom - en fonction du type de graphique - et une infobulle pour les boutons. Comme pour SmallGraphItem, le type de graphique affiché est déterminé en fonction de l'état.
Paramètres
La vue Paramètres a été retirée du contenu principal Layout, car elle n'utilise aucune partie des vues Tableau de bord ou Détails:
// Settings SettingsItem { id: settingscontent anchors.fill: parent ...
La vue Paramètres contient un autre site BigGraphItem pour l'affichage du graphique, ainsi qu'un volet de paramètres permettant d'ajuster les propriétés de GraphsTheme ou certaines propriétés spécifiques au type de graphique sélectionné.
// Graph detail BigGraphItem { id: settingsgraph width: GlobalSettings.settingsgraphwidth anchors.top: parent.top anchors.bottom: parent.bottom anchors.topMargin: GlobalSettings.graphdetailmargin radius: GlobalSettings.defaultradius opacity: parent.opacity piesimulator: settingsitem.piesimulator barsimulator: settingsitem.barsimulator linesimulator: settingsitem.linesimulator } // Settings pane StackLayout { id: settingspane ...
Thème global
Les paramètres de l'onglet General Settings affectent tous les graphiques de l'application. Un thème global GraphsTheme a été implémenté en tant que Singleton dans GlobalSettings.qml:
pragma Singleton ... QtObject { id: global ... // Common graph theme property var theme: GraphsTheme { plotAreaBackgroundVisible: false backgroundVisible: false colorScheme: GraphsTheme.ColorScheme.Dark theme: GraphsTheme.Theme.BlueSeries labelTextColor: "#AEAEAE" labelBackgroundVisible: true labelFont.pointSize: global.fontsize28px grid.mainColor: "#AEAEAE" grid.mainWidth: 1 baseGradients: [ global.customgradient ] }
Ce thème global partagé est défini comme thème pour chaque graphique :
theme: GlobalSettings.theme
En tant que singleton, le GlobalSettings.qml doit également être marqué comme tel dans le CMakeLists.txt pour être utilisable dans l'application :
set_source_files_properties(qml/GlobalSettings.qml PROPERTIES QT_QML_SINGLETON_TYPE TRUE)
Paramètres du graphique
Les paramètres de l'onglet Graph Settings n'affectent que le graphique actuellement sélectionné. Ces paramètres ne modifient pas le thème global, mais uniquement les séries du graphique actif.
© 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.