Il y a cette configuration QML pour mémoriser le thème de l'application :

import QtQuick.Controls 2.0 as QQC2

QQC2.ApplicationWindow {

    id: standaloneWindow // ID is required to be able to get properties
    
    Material.theme: Material.Dark // Can be either Dark or Light

    Component.onCompleted: {
        // On launch, read theme from settings file
        standaloneWindow.Material.theme = appSettings.materialTheme
    }

    Component.onDestruction:{
        // On close, write theme to settings file
        appSettings.materialTheme = standaloneWindow.Material.theme
    }

    Settings {
        id: appSettings

        category: "Theme"
        property int materialTheme // Store theme as "int" type in settings file
    }

}

Problème

Au tout premier lancement (par exemple lorsque le fichier de paramètres est supprimé), le thème ne peut pas être démarré avec Dark. Au tout premier lancement, l'application toujours commence avec le thème Light, quoi qu'il arrive !

Cause

Lorsqu'il n'y a pas de fichier de paramètres, le appSettings.materialTheme devient 0 qui est par défaut pour le type int. Par conséquent, 0 est équivalent à Material.Dark enum. C'est pourquoi l'application démarre toujours en mode sombre lorsqu'il n'y a pas de fichier de paramètres.

Question

Comment puis-je faire démarrer l'application en mode clair, même s'il n'y a pas de fichier de paramètres ?

J'ai essayé jusqu'à présent

J'ai essayé d'utiliser alias plutôt que int, mais standaloneWindow n'a pas de propriété à lier à Material.theme :

    Settings {
        // ...
        property alias materialTheme: standaloneWindow.???
    }

Any suggestion?
1
user3405291 14 oct. 2020 à 14:11

1 réponse

Meilleure réponse

Comme commenté par @Mitch , le problème a été résolu par :

    Settings {

        id: appSettings

        category: "Theme"

        // Set dark theme to be default for the very first launch (when settings file is NOT available)
        property int materialTheme: Material.Dark
    }
0
user3405291 14 oct. 2020 à 12:45