Intégration de la bibliothèque QML Material pour interfaces QtQuick

QML Material constitue une suite de composants QML destinés à QtQuick, respectant les directives de Material Design établies par Google. Cette solution fonctionne indifféremment sur Linux, macOS et Windows. Les équipes de Papyros en assurent le développement et la maintenance.

Méthodes d'installation

Via QPM (Qt Package Manager)

Après configuration de QPM, l'installation s'efffectue par cette instruction :

qpm install io.papyros.material

Pour intégrer la police Roboto directement dans votre build, ajoutez cette directive avant l'inclusion du fichier vendor.pri :

OPTIONS += roboto

Via Git submodule et QMake

Commencez par référencer le dépôt comme sous-module :

git submodule add git@github.com:papyros/qml-material.git material

Puis intégrez le fichier .pri correspondant dans votre système de compilation (CMake, QMake ou QBS).

Configuration du moteur QML

Le code C++ suivant prépare l'environnement d'exécution pour charger les modules Material :

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QUrl>
#include <material/vendor.h>

int main(int nbArgs, char **listeArgs)
{
    QGuiApplication app(nbArgs, listeArgs);
    
    QQmlApplicationEngine moteur;
    
    // Macro d'initialisation du gestionnaire de paquets
    add_definitions("-DQPM_INIT(E)=E addImportPath(QStringLiteral(\"qrc:/\"))");
    include(material.vendor.cmake);
    
    QPM_INIT(moteur);
    
    moteur.load(QUrl(QStringLiteral("qrc:/main.qml")));
    
    return app.exec();
}

Cette séquence rend disponible l'espace de noms Material 0.3 dans vos fichiers QML.

Utilisation dans les fichiers QML

L'exemple ci-après démontre l'application d'une palette chromatique et de propriétés visuelles Material :

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Controls.Material 2.15

ApplicationWindow {
    id: fenetrePrincipale
    visible: true
    width: 800
    height: 600
    
    Material.theme: Material.Dark
    Material.accent: Material.Teal
    
    Rectangle {
        anchors.fill: parent
        color: Material.background
        
        BoutonPersonnalise {
            id: actionPrincipale
            texteAffiche: "Valider"
            couleurFond: Material.accent
            couleurTexte: Material.foreground
            taillePolice: 18
            ancres.centreIn: parent
        }
    }
}

Composant personnalisé : bouton stylisé

Pour illustrer la création de composants réutilisables avec cette bibliothèque :

// BoutonPersonnalise.qml
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Controls.Material 2.15

Button {
    property string texteAffiche: ""
    property color couleurFond: Material.primary
    property color couleurTexte: "white"
    property int taillePolice: 14
    
    text: texteAffiche
    font.pixelSize: taillePolice
    
    background: Rectangle {
        implicitWidth: 160
        implicitHeight: 48
        color: parent.pressed ? Qt.darker(couleurFond, 1.2) : couleurFond
        radius: 4
        
        layer.enabled: parent.hovered
        layer.effect: DropShadow {
            verticalOffset: 2
            radius: 8
            samples: 16
            color: "#40000000"
        }
    }
    
    contentItem: Text {
        text: parent.text
        font: parent.font
        color: couleurTexte
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
    }
}

Thématisation dynamique

Voici comment basculer entre thèmes clair et sombre à l'exécution :

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Controls.Material 2.15

Item {
    id: conteneurTheme
    
    property bool modeSombre: false
    
    function basculerTheme() {
        modeSombre = !modeSombre;
        Material.theme = modeSombre ? Material.Dark : Material.Light;
    }
    
    Rectangle {
        id: indicateurVisuel
        width: 200
        height: 200
        anchors.centerIn: parent
        color: Material.background
        border.color: Material.divider
        
        Text {
            id: libelleEtat
            text: modeSombre ? "Mode nuit activé" : "Mode jour activé"
            color: Material.foreground
            anchors.centerIn: parent
        }
        
        MouseArea {
            anchors.fill: parent
            onClicked: conteneurTheme.basculerTheme()
        }
    }
}

Applications concrètes

Cette bibliothèque s'applique particulièrement bien dans les contextes suivants :

  • Interfaces de contrôle industriel : tableaux de bord avec indicateurs visuels cohérents et lisibles
  • Logiciels de bureautique : suites d'outils nécessitant une navigation intuitive par onglets et panneaux latéraux
  • Kiosques interactifs : écrans tactiles publics avec contraste élevé et retour haptique visuel
  • Applications médicales : interfaces exigeant clarté et réduction des erreurs de manipulation

Points d'attention

L'évolution des versions de QtQuick et de Material Design peut entraîner des modifications d'API. Il est recommandé de consulter la documentation officielle du projet pour les détails les plus récents concernant les propriétés disponibles et les signatures de fonctions.

Étiquettes: QML QtQuick Material Design QPM Qt Package Manager

Publié le 13 août à 12h20