QML est un acronyme qui signifie Q t M eta-object L anguage. C'est un langage de programmation déclaratif qui fait partie du framework Qt. L'objectif principal de QML est la création rapide et facile d'interfaces utilisateur pour les systèmes de bureau, mobiles et intégrés. QML permet une intégration transparente de JavaScript , soit directement dans le code QML, soit en incluant des fichiers JavaScript.
Version Qt | Version QtQuick | Date de sortie |
---|---|---|
4.7 | 1.0 | 2010-09-21 |
4.8 | 1.1 | 2011-12-15 |
5.0 | 2.0 | 2012-12-19 |
5.1 | 2.1 | 2013-06-03 |
5.2 | 2.2 | 2013-12-12 |
5.3 | 2.3 | 2014-05-20 |
5.4 | 2.4 | 2014-12-10 |
5.5 | 2,5 | 2015-07-01 |
5.6 | 2.6 | 2016-03-15 |
5.7 | 2.7 | 2016-06-16 |
5.8 | 2.7 | 2017-01-23 |
QML est livré avec une version plus récente de l'infrastructure d'application multiplate-forme Qt . Vous pouvez trouver la version la plus récente de Qt dans la section Téléchargements .
Pour créer un nouveau projet QML dans l' EDI de Qt Creator , sélectionnez "Fichier -> Nouveau ..." et sous "Applications", sélectionnez "Application rapide Qt". Après avoir cliqué sur "sélectionner", vous pouvez maintenant nommer et définir le chemin pour ce projet. Après avoir cliqué sur "suivant", vous pouvez sélectionner les composants que vous souhaitez utiliser. En cas de doute, laissez simplement la valeur par défaut et cliquez sur "Suivant". Les deux étapes suivantes vous permettront de configurer un kit et un contrôle de source si vous le souhaitez, sinon conservez les paramètres par défaut.
Vous avez maintenant créé une application QML simple et prête à l'emploi.
Une application simple montrant le texte "Hello World" au centre de la fenêtre.
import QtQuick 2.3
import QtQuick.Window 2.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World") //The method qsTr() is used for translations from one language to other.
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
}
Vous pouvez facilement transformer chaque composant dans un bouton cliquable à l'aide du composant MouseArea. Le code ci-dessous affiche une fenêtre 360x360 avec un bouton et un texte au centre; En appuyant sur le bouton, le texte change:
import QtQuick 2.0
Rectangle {
width: 360
height: 360
Rectangle {
id: button
width: 100
height: 30
color: "red"
radius: 5 // Let's round the rectangle's corner a bit, so it resembles more a button
anchors.centerIn: parent
Text {
id: buttonText
text: qsTr("Button")
color: "white"
anchors.centerIn: parent
}
MouseArea {
// We make the MouseArea as big as its parent, i.e. the rectangle. So pressing anywhere on the button will trigger the event
anchors.fill: parent
// Exploit the built-in "clicked" signal of the MouseArea component to do something when the MouseArea is clicked.
// Note that the code associated to the signal is plain JavaScript. We can reference any QML objects by using their IDs
onClicked: {
buttonText.text = qsTr("Clicked");
buttonText.color = "black";
}
}
}
}
Cet exemple montre l'utilisation la plus simple du composant Image pour afficher une image.
La propriété source
Image est un type d'URL qui peut être un fichier avec un chemin absolu ou relatif, une URL Internet ( http://
) ou une ressource Qt ( qrc:/
)
import QtQuick 2.3
Rectangle {
width: 640
height: 480
Image {
source: "image.png"
}
}
Cet exemple montre comment l'événement de souris est utilisé dans QML.
import QtQuick 2.7
import QtQuick.Window 2.2
Window {
visible: true
Rectangle {
anchors.fill: parent
width: 120; height: 240
color: "#4B7A4A"
MouseArea {
anchors.fill: parent // set mouse area (i.e. covering the entire rectangle.)
acceptedButtons: Qt.AllButtons
onClicked: {
// print to console mouse location
console.log("Mouse Clicked.")
console.log("Mouse Location: <",mouseX,",",mouseY,">")
//change Rectangle color
if ( mouse.button === Qt.RightButton )
parent.color = 'blue'
if ( mouse.button === Qt.LeftButton )
parent.color = 'red'
if ( mouse.button === Qt.MiddleButton )
parent.color = 'yellow'
}
onReleased: {
// print to console
console.log("Mouse Released.")
}
onDoubleClicked: {
// print to console
console.log("Mouse Double Clicked.")
}
}
}
}