IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Quick Discussion :

Comment charger des composants ? [Débuter]


Sujet :

Qt Quick

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut Comment charger des composants ?
    Bonjour,
    J'ai fait pas mal de recherches et je reste indécis sur le chargement des composants en QML. Si j'ai bien compris, on a:
    -la propriété visible. Pratique mais impose de charger tous les composants au début donc pas très performant et n'est pas forcément adaptée à toutes les utilisations.
    -Le composant Loader. Pratique mais je n'ai pas trouvé comment créer plusieurs instances du même objet.
    -Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var component
                    component = Qt.createComponent("../panneauConfiguration/ConfigurationMain.qml")
                    component.createObject()
    Là on peut créer plusieurs instances du composant.

    Mon problème ici est que je souhaite ouvrir une fenêtre à partir d'une autre fenêtre, la principale. La fenêtre en question est celle de configuration. Donc je veux pouvoir l'ouvrir à chaque fois que l'utilisateur clique sur le bouton, mais je ne veux pas qu'il y en ai plusieurs d'ouvertes à la fois. Et je souhaiterais éviter d'utiliser la propriété visible vis-à-vis des performances (le panneau de configuration est blindé d'animations, d'états, de boutons, de views, etc...).
    A votre avis, comment est-ce que je peux faire ça?
    Merci de votre aide

    Cordialement

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut
    Ou alors même mieux, comment puis-je empêcher l'utilisateur d'accéder à la première fenêtre lorsque la deuxième est ouverte? ça réglerais le problème

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 107
    Par défaut
    Bonjour,
    Utilise une property dans laquelle tu stock ton objet (créé par createObject) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
    import QtQuick 2.4
    import QtQuick.Window 2.1
     
    Rectangle {
        id: container
        width: 400
        height: 200
        property var configWindowObject: null
     
        Rectangle {
            width: 200
            height:  200
            color: "red"
            Text {
                anchors.centerIn: parent
                text: "Ouvrir config 1"
            }
            MouseArea {
                anchors.fill: parent
                onClicked: loadConfigWindow("ConfigWindow1.qml")
            }
        }
        Rectangle {
            x: 200
            width: 200
            height:  200
            color: "green"
            Text {
                anchors.centerIn: parent
                text: "Ouvrir config 2"
            }
            MouseArea {
                anchors.fill: parent
                onClicked: loadConfigWindow("ConfigWindow2.qml")
            }
        }
        function loadConfigWindow(qmlFile) {
            if(configWindowObject != null) {
                delete configWindowObject.destroy()
            }
            var component = Qt.createComponent(qmlFile);
            if (component.status == Component.Ready) {
                configWindowObject = component.createObject(container);
            }
        }
    }
    et ConfigWindow1.qml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import QtQuick 2.4
    import QtQuick.Window 2.1
     
    Window {
        width: 320
        height: 240
        visible: true
        Text {
            anchors.centerIn: parent
            text: "Second Window 1"
        }
    }
    ConfigWindow2.qml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import QtQuick 2.4
    import QtQuick.Window 2.1
     
    Window {
        width: 320
        height: 240
        visible: true
        Text {
            anchors.centerIn: parent
            text: "Second Window 2"
        }
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut
    Merci, ça marche bien! Et du coup pour rendre la première fenêtre impossible à utiliser quand la deuxième est ouverte, comment est-ce que je peux faire ça? Voyez, j'aurais bien vu ça comme les fenêtre de windows qui clignotent quand une fenêtre enfant est ouverte.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 107
    Par défaut
    il faut ajouter dans ConfigWindow1 par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    modality: Qt.WindowModal

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut
    Nickel! ça marche à la perfection! Merci.
    Pour les suivants, il faut bien importer QtQuick.Window 2.1. Avec la 2.0, ça ne marche pas.

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment charger des objets dans un accde
    Par alain91210 dans le forum Modélisation
    Réponses: 1
    Dernier message: 19/12/2007, 21h50
  2. Réponses: 1
    Dernier message: 08/12/2007, 18h42
  3. Comment charger des données en mémoire à partir d'une BDD
    Par n@n¤u dans le forum Persistance des données
    Réponses: 2
    Dernier message: 20/02/2007, 11h53
  4. [C# express] Comment ajouter des composants à la palette d'outils?
    Par Jayceblaster dans le forum Visual Studio
    Réponses: 1
    Dernier message: 04/11/2006, 20h40
  5. [Dexplore] Comment charger des fichiers d'aide ?
    Par Laurent Dardenne dans le forum Windows
    Réponses: 5
    Dernier message: 04/01/2005, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo