Accès rapide :
Définir un composant QML réutilisable
Intégration du composant QML dans une application basée sur l'approche QtWidgets
Pour définir un simple composant, votre fichier QML peut utiliser un objet de type Rectangle au plus haut niveau.
Voici un exemple de fichier QML un peu riche : il introduit la notion de dégradé et de gestionnaire d'événements connecté à une animation.
import QtQuick
import QtQuick.Controls
Rectangle {
width: 400
height: 300
Rectangle {
id: rect
x: 10; y: 10
width: 100; height: 100
color: "red"
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onEntered: console.log("enter")
onExited: console.log("exited")
}
states: State {
name: "moved"
when: mouseArea.pressed
PropertyChanges { target: rect; x: 200; y: 200; width: 200; height: 200; color: "blue" }
}
transitions: Transition {
NumberAnimation {
properties: "x,y,width,height"
duration: 1000
easing.type: Easing.InOutQuad
}
ColorAnimation {
duration: 1000
properties: "color"
}
}
}
Rectangle {
x: 250; y: 10
width: 100; height: 100
gradient: Gradient {
GradientStop { position: 0.0; color: "red" }
GradientStop { position: 0.33; color: "yellow" }
GradientStop { position: 1.0; color: "green" }
}
}
Button {
x: 80; y: 150
text: "Push Me"
width: 200
}
}
Pour intégrer votre composant QML dans une application basée sur l'approche QtWidgets, il faut envelopper votre composant dans une instance de type
QQuickWidget. La méthode
setSource permet de définir le fichier
QML à charger.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import sys from PySide6.QtCore import QUrl from PySide6.QtGui import QIcon from PySide6.QtQuickControls2 import QQuickStyle from PySide6.QtQuickWidgets import QQuickWidget from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QComboBox class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("QtWidgets/QtQuick(QML) Integration") self.setWindowIcon(QIcon("icons/file.png")) self.resize(400, 300) vbox = QVBoxLayout() vbox.addWidget(QPushButton("Click me")) combo = QComboBox() combo.addItems(["First", "Second", "Third"]) vbox.addWidget(combo) qml = QQuickWidget() qml.setSource(QUrl.fromLocalFile("QmlIntegration.qml")) vbox.addWidget(qml) central = QWidget() central.setLayout(vbox) self.setCentralWidget(central) if __name__ == "__main__": app = QApplication(sys.argv) QQuickStyle.setStyle("Fusion") # Fusion, Imagine, Material, Universal, Default myWindow = MyWindow() myWindow.show() sys.exit(app.exec()) |
Et voici le visuel observé après démarrage de l'application. Appuyez avec le bouton gauche de la souris sur le rectangle rouge pour voir l'animation s'exécuter.
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 :