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 Discussion :

Passage de variables de MainWindows à une fonction ?


Sujet :

Qt

  1. #1
    epc
    epc est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 83
    Points : 47
    Points
    47
    Par défaut Passage de variables de MainWindows à une fonction ?
    Bonsoir
    Je cherche sans trouver la solution.
    L'affichage dans ui->textEdit1 se fait bien, mais pas dans ui->textEdit2. Lorsque je clique sur le bouton j'ai 23:30:08: C:/.../fichier.exe crashed.
    J'ai vérifié avec QMessageBox, le bouton déclenche bien la fonction on_pushButton_clicked();
    J'ai mis ui->textEdit2->setText("yes"); ça fonctionne.
    J'ai l'impression qu'i n'aime pas cette ligne : QString value = *chaine2; !!!
    Merci pour votre aide.
    Marcel

    Voici le mainwindow.cpp
    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
     
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        QString chaine1 = "Bonjour";
        chaine2 = &chaine1;
     
        QString value = *chaine2;
        ui->textEdit1->setText(value);
    }
    void MainWindow::on_pushButton_clicked()
    {
        QString values = *chaine2;
        ui->textEdit2->setText(values);
    }
    Voici ce que j'ai rajouté dans le mainwindow.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private slots:
        void on_pushButton_clicked();
    Private:
    QString * chaine2;

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 579
    Points : 7 702
    Points
    7 702
    Par défaut
    Citation Envoyé par epc Voir le message
    J'ai l'impression qu'i n'aime pas cette ligne : QString value = *chaine2; !!!
    En effet, tu vois juste!
    Que vaut chaine2? On voit ligne 7, que chaine2 pointe sur chaine1.
    chaine1 était une variable qui existait dans le constructeur.
    Et l'appel du constructeur est terminé, donc chaine1 n'existe plus.
    Donc chaine2 pointe sur quelque chose qui n'existe plus.
    Et le code veut faire QString value = *chaine2; donc veut récupérer la valeur d'une variable disparue!!!

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 386
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 386
    Points : 20 476
    Points
    20 476
    Par défaut
    Pourquoi déclarer la variable chaine2 comme pointeur ? Il suffit de la déclarer comme variable "standard" comme ça la valeur et l'existence de cette variable persistera de même qu'une instance de classe de Mainwindow persistera.
    Là vous faites compliqué alors qu'on peut faire simple.
    Après si vous voulez obtenir soit une instance de *chaine2 ou sa valeur chaine il suffit dans la classe de MainWindow de déclarer un "getter" comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Chaine *ObtientChaine()
    {
    return chaine2;
    ]
    Ensuite lorsqu'on utilise des pointeurs le bon sens voudrait de les initialiser à NULL et ensuite lorsqu'on les utilise tester s'ils sont différents de NULL

  4. #4
    epc
    epc est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 83
    Points : 47
    Points
    47
    Par défaut
    Merci pour vos réponses.
    Et l'appel du constructeur est terminé, donc chaine1 n'existe plus.
    C'est ce qui me manquait.

    J'ai rajouté chaine1 dans MainWindow.h. Ca fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private slots:
        void on_pushButton_clicked();
    Private:
    QString * chaine2, chaine1;
    MaClasse * fConf;
    Le pointeur ? C'est parce que j'utilise QStringList.
    Le chemin de chaine2 n'est pas fini. A l'appel du pushBoutton la fonction a besoin d'un calcul.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void MainWindow::on_pushButton_clicked()
    {
        QString values = *chaine2;
        ui->textEdit2->setText(values);
        fConf->modifier_ligne_int(0, ui->spinBox1->value());
    }
    Dans mon fichier MaClasse.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MaClasse::modifier_ligne_int(int numligne, int valeur)
    { 
        QString values = *chaine2; // ne fonctionne pas 
    }
    Mon pointeur chaine2 n'est pas défini dans ma classe.
    Je ne peux pas passer sa valeur dans cette fonction ???
    16:09:08: C:/.../fichier.exe crashed.

    Cdt
    Marcel

  5. #5
    epc
    epc est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 83
    Points : 47
    Points
    47
    Par défaut
    J'ai pu avancer.
    J'ai modifié mes structures de mes fonctions.
    La fonction d'appel du bouton. J'ai modifié "modifier_ligne_int" et j'envoie en plus ma QStringList.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void MainWindow::on_pushButton_clicked()
    {
        // QStringList qstringList_de_chaine2 est en private dans MainWindow
        qstringList_de_chaine2 = fConf->modifier_ligne_int(0, ui->spinBox1->value(), qstringList_de_chaine2);
    }
    Avec la fonction de MaClasse, je fais le travail nécessaire et je retourne ma QStringList.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QStringList MaClasse::modifier_ligne_int(int numligne, int valeur, QStringList m_chaine2)
    { 
        QStringList m_chaine3;
        ... w sur m_chaine2 vers m_chaine3
        return m_chaine3;
    }
    Mais le retour dans QStringList n'est pas correcte.
    chaineList_de_chaine2 = fConf->modifier_ligne_int(0, ui->spinBox1->value(), chaineList_de_chaine2);
    Pouvez-vous m'indiquer la syntaxe de cette dernière ligne ?
    Merci
    Cdt
    Marcel

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

Discussions similaires

  1. [PHP-JS] Passage de variable PHP dans une fonction JS
    Par redvivi dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2008, 13h07
  2. [Lisp] Variable considérée comme une fonction
    Par lunart dans le forum Lisp
    Réponses: 2
    Dernier message: 07/04/2005, 15h48
  3. Utilisé une variable hors d'une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/02/2005, 19h21
  4. variable hors d'une fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/02/2005, 08h29
  5. passage de tableau 2D a une fonction
    Par watashinoitadakimasu dans le forum C
    Réponses: 2
    Dernier message: 11/09/2003, 02h33

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