Débuter avec qml

Bonjour le monde

Une application simple affichant 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
    }
}

Installation

QML est livré avec une version plus récente du framework d’application multiplateforme [Qt][1]. Vous pouvez trouver la dernière version de Qt dans la [section Téléchargements][2].

Pour créer un nouveau projet QML dans [Qt Creator IDE][3], sélectionnez “Fichier -> Nouveau …” et sous “Applications”, sélectionnez “Qt Quick-Application”. Après avoir cliqué sur “sélectionner”, vous pouvez maintenant nommer et définir le chemin de 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 prochaines étapes 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.

[1] : https://www.qt.io/ [2] : https://www.qt.io/download-open-source/#section-2 [3] : https://www.qt.io/ide/

Création d’un bouton simple

Vous pouvez facilement transformer chaque composant en 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 ; appuyer sur le bouton changera le texte :

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";
            }
        }
    }
}

Afficher une image

Cet exemple montre l’utilisation la plus simple du composant Image pour afficher une image.

La propriété Image source est un [type d’url][1] qui peut être soit un fichier avec un chemin absolu ou relatif, une URL Internet (http://) ou une [ressource Qt][2] ( qc:/)

import QtQuick 2.3

Rectangle {
    width: 640
    height: 480

    Image {
         source: "image.png"
    }
}

[1] : http://doc.qt.io/qt-5/qml-url.html [2] : http://doc.qt.io/qt-5/resources.html

Événement de souris

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.")
            }

        }
    }


}