Accès rapide :
Le composant SwipeView
Le composant TabBar
Lier le composant SwipeView avec le composant TabBar
Ce composant graphique permet d'afficher plusieurs panneaux. A un instant donné, seul un panneau est affiché, mais il est possible de passer au panneau suivant, ou précédent, d'un mouvement de doigt horizontal vers la gauche ou la droite. Ce mouvement est appelé un « swipe » (glisser en anglais).
Voici un exemple d'utilisation de ce composant (testez bien les changements de panneaux).
SwipeView {
id: swipeView
anchors.fill: parent
Repeater {
model: 3
Pane {
Text {
text: "Panneau " + model.index
horizontalAlignment: Qt.AlignHCenter
}
}
}
}
Traditionnellement, le composant « SwipeView » est couplé avec un composant « TabBar ». Ce dernier afficher les onglets permettant le changement de panneau par simple appuie sur un onglet donné. Voici un exemple d'utilisation.
TabBar {
TabButton {
text: "Premier"
}
TabButton {
text: "Second"
}
TabButton {
text: "Troisième"
}
}
Voici le résultat graphique obtenu en ajoutant le composant « TabBar » en dessous du composant « SwipeView ». Vous noterez que si vous utilisez le thème « Fusion » (c'est le thème par défaut sous Linux), le visuel ne sera pas terrible.
Dans ce cas, je vous conseille de passer avec un thème adapté à une application tactile et pourquoi pas le thème « Material ». Voici le code permettant d'appliquer ce thème au démarrage de l'application.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import sys from PySide6.QtGui import QGuiApplication from PySide6.QtQml import QQmlApplicationEngine from PySide6.QtCore import QUrl # N'oubliez pas cet import, si vous souhaitez changer de style. from PySide6.QtQuickControls2 import QQuickStyle # On démarre l'application QML et l'engine app = QGuiApplication([]) engine = QQmlApplicationEngine() # On change le style utilisé par l'application QQuickStyle.setStyle("Material") # On charge le fichier QML à présenter engine.load(QUrl("Tabs.qml")) # On lance la boucle de traitement des événements sys.exit(app.exec()) |
Et voici le nouveau visuel produit : pour ma part, je trouve ça beaucoup mieux.
Les deux composants précédents sont prévus pour fonctionner ensemble, mais faut-il encore les lier. Si vous changez de panneau via un mouvement de « Swipe », il faudra que le « TabBar » se synchronise et inversement.
Dans les deux cas, c'est la propriété currentIndex qu'il faut lier à l'autre composant.
Il faut donc aussi identifier les deux composants graphiques : dans notre exemple swipeView et tabBar.
Voici le code final permettant de lier les deux composants.
import QtQuick
import QtQuick.Controls
ApplicationWindow {
title: "Mise en oeuvre d'onglets en QML"
width: 400
height: 400
visible: true
SwipeView {
id: swipeView
anchors.fill: parent
currentIndex: tabBar.currentIndex
Repeater {
model: 3
Pane {
Text {
text: "Panneau " + model.index
anchors.horizontalCenter: parent.horizontalCenter
}
}
}
}
footer: TabBar {
id: tabBar
currentIndex: swipeView.currentIndex
TabButton {
text: "Premier"
}
TabButton {
text: "Second"
}
TabButton {
text: "Troisième"
}
}
}
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :