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 :

Cannot read property 'value' of undefined [Débuter]


Sujet :

Qt Quick

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Points : 62
    Points
    62
    Par défaut Cannot read property 'value' of undefined
    Bonjour, je débute tout juste sur QML, et je voulais faire une petite application permettant de calculer l'imc et le poids ideal d'une personne.
    J'ai 2 pages.
    La première permet de saisir les infos utiles (sexe, taille, age, poids).
    La seconde affiche l'imc et la corpulence, et propose de calculer le poids idéal suivant 3 méthodes au choix.
    Mon problème est de mettre à jour les données d'une page en fonction des données de l'autre page


    Du coup j'ai 3 fichiers:
    + main.qml
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    import QtQuick 2.9
    import QtQuick.Controls 2.2
     
    ApplicationWindow {
        visible: true
        width: 640
        height: 480
        title: qsTr("Tabs")
     
        SwipeView {
            id: swipeView
            anchors.fill: parent
            currentIndex: tabBar.currentIndex
     
            Page1Form {
                switchSexe.onCheckedChanged{
                    if (switchSexe.text==="Femme")
                    {
                        switchSexe.text="Homme"
                    }
                    else
                    {
                        switchSexe.text="Femme"
                    }
                }
                sliderPoids.onValueChanged{
                    labelValPoids.text=sliderPoids.value;
                }
                sliderTaille.onValueChanged{
                    labelValTaille.text=sliderTaille.value;
                }
     
            }
     
            Page2Form {
            }
     
        }
     
        footer: TabBar {
            id: tabBar
            currentIndex: swipeView.currentIndex
     
            TabButton {
                text: qsTr("Informations Personnelles")
            }
            TabButton {
                text: qsTr("IMC et Poids idéal")
            }
            onCurrentIndexChanged{
                if (currentIndex===1)
                {
                    var imc;
                    var poids;
                    var taille;
                    poids=Page1Form.sliderPoids.value;
                    console.log(poids);
                    taille=Page1Form.sliderTaille.value;
                    imc=poids/(taille*taille);
                    Page2Form.labelIMC.text=imc;
                }
            }
        }
    }
    + Page1Form.ui.qml
    extrait:
    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
     
    Page {
        id: page1
        width: 600
        height: 400
        property alias page1: page1
        property alias spinBoxAge: spinBoxAge
        property alias labelValPoids: labelValPoids
        property alias labelValTaille: labelValTaille
        property alias sliderTaille: sliderTaille
        property alias sliderPoids: sliderPoids
        property alias switchSexe: switchSexe
     
    ...
     
            RowLayout {
                id: rowLayout5
                width: 100
                height: 100
     
                Label {
                    id: labelPoids
                    text: qsTr("Poids")
                }
     
                Slider {
                    id: sliderPoids
                    stepSize: 0.1
                    from: 15
                    to: 300
                    value: 15
                }
     
                Label {
                    id: labelValPoids
                    text: qsTr("15")
                }
            }        
        }
    }
    + Page2Form.ui.qml
    extrait:
    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
     
    Page {
        width: 600
        height: 400
        property alias buttonAge: buttonAge
        property alias buttonLorentz: buttonLorentz
        property alias buttonDevine: buttonDevine
        property alias labelPoidsIdeal: labelPoidsIdeal
        property alias dial: dial
        property alias labelIMC: labelIMC
        property alias labelCorpulence: labelCorpulence
     
       ...
     
                Text {
                    id: text1
                    text: qsTr("IMC")
                    font.pixelSize: 12
                }
                Label {
                    id: labelIMC
                    text: qsTr("IMCCalculée")
                }
            }
        }
    }
    Je passe bien dans mon code de test de la valeur de l'index courant, mais je n'arrive pas à récupérer le poids et la taille de Page1Form...
    Je m'y prend sûrement mal, quelqu'un peut il éclairer ma faible lanterne?

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    L'erreur QML que tu as à l'exécution t'affiche normalement le fichier et la ligne où l'erreur s'est produite, avec ça tu devrais pouvoir comprendre rapidement le problème.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par ymoreau Voir le message
    L'erreur QML que tu as à l'exécution t'affiche normalement le fichier et la ligne où l'erreur s'est produite, avec ça tu devrais pouvoir comprendre rapidement le problème.
    Oui, le problème vient de cette ligne du fichier main.qml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    poids=Page1Form.sliderPoids.value;
    Mais je ne vois pas comment le résoudre.

  4. #4
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    En QML (comme en C++) tu as besoin d'instances des objets, d'un côté tu déclares ton item QML dans Page1Form.ui.qml et de l'autre tu l'instancies dans ton main avec Page1Form { ... }Quand tu veux appeler les fonctions ou des propriétés de ton item tu dois le faire sur l'instance (sauf pour les membres/fonctions statiques, comme en C++). Or tu utilises le nom de classe et pas d'instance, sur la ligne qui est en erreur.

    Pour résoudre le problème :
    • Assigne un id à tes instances d'item Page1Form { id: page1 ... }
    • Utilise cet id pour appeler des fonctions ou propriétés poids=page1.sliderPoids.value;


    Si ce n'est pas clair, je te conseille de regarder les introductions de la doc Qt, et des exemples, pour bien comprendre comment on imbrique les items et ce que ça signifie au niveau objet.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Points : 62
    Points
    62
    Par défaut
    Merci!!
    super clair.
    ça marche impec!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/06/2016, 20h45
  2. Erreur : TypeError: Cannot read property 'test' of undefined
    Par deathness dans le forum AngularJS
    Réponses: 1
    Dernier message: 11/05/2016, 10h42
  3. Réponses: 3
    Dernier message: 30/05/2015, 12h08
  4. [V8] Importation csv Error Cannot read property '1' of undefined
    Par vernetk dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 11/02/2015, 16h36
  5. Réponses: 15
    Dernier message: 15/06/2013, 01h11

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