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

Discussion :

Renvoyer une valeur QString

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Renvoyer une valeur QString
    Bonjour a tous, jai de petits soucis pour utiliser les guetter.
    Je suis debutant en Qtcreator et essaye de developper un Interface. Mon premier problem est de recuperer le repertoire que j'ai selectioner dans ma fenetre principale. A l'aide d'une fonction getter, je pourrais utiliser le repertoire dans dautre sous-fentre de mon programme. Je vraiment besoin de tipps. . Bref ci dessous, ma classe:



    mainwindow.h

    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
    class MainWindow:public QMainWindow
    {
        Q_OBJECT                  
     
    public:
        MainWindow(QWidget *parent = 0);        
        QString getDirName() const;             //Accessor Function 
     
    public slots:
        void selectdirectory();               
     
    private:
        QMenu   *menuFile;
        QAction *Dateipath;  
        QString *mydirectory;   
    };


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    MainWindow::MainWindow(QWidget *parent):QMainWindow(parent)
    {
        menuFile = menuBar()->addMenu("&File");
        Dateipath = new QAction("&Select directory", this);
        menuFile -> addAction(Dateipath);
     
        QObject::connect(Dateipath, SIGNAL(triggered()),this, SLOT(selectdirectory()));
    }
     
     
     
    void MainWindow::selectdirectory()
    {
        QString Dirt=QFileDialog::getExistingDirectory(this,("select directory....."),"/home",
                                                       QFileDialog::ShowDirsOnly|QFileDialog::DontResolveSymlinks);
     
            mydirectory = &Dirt;                                                       <---------  //    ici le repertoire actuell:   /home/users/lucie/projects/
    }
     
     
     
    QString MainWindow::getDirName() const                                 //fonction getter....... fais des problemes
    {
        return  *mydirectory;       <----------------------------------// le programm plante ici.    Impossible de recuperer le repertoire(/home/users/lucie/projects
    }

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 585
    Points
    188 585
    Par défaut


    L'apprentissage du C++ n'est pas optionnel avant d'utiliser Qt, c'est plus que très recommandé. Là, dans ta méthode selectdirectory(), tu crées une variable locale, puis tu écris son adresse quelque part ; une fois l'exécution de la méthode finie, la variable locale n'existe plus : tu as l'adresse d'une maison qui vient d'exploser, pas très utile.

    Si tu veux vraiment continuer à utiliser un pointeur, il faut allouer la mémoire avec new (il faudra alors penser à la désallouer, donc à éviter). Sinon, tu élimines le pointeur et tu écris directement le champ de ton objet (mydirectory = QFileDialog::getExistingDirectory…).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut echec
    Merci Dourouc05. Mais ca ne marche pas.
    meme en declarant mydirectory comme pointeur, il reste impossible de rappeller cette meme valeur en hors du Slot "selectdirectory()". La declaration d'un QString comme pointeur semble faire des problemes!

    mainwindow.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        Q_OBJECT                             
     
    public:
        MainWindow(QWidget *parent = 0);    
        QString getDirName() const;                               //accesseur
     
    public slots:
        void selectdirectory();    
    private:
    QString *mydirectory

    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
    17
    MainWindow::MainWindow(QWidget *parent):QMainWindow(parent)
    {
       QObject::connect(Dateipath, SIGNAL(triggered()),this, SLOT(selectdirectory()));
    }
     
    void MainWindow::selectdirectory()
    { 
    mydirectory = = new QString(QFileDialog::getExistingDirectory(this,("select directory....."),"/home",QFileDialog::ShowDirsOnly|QFileDialog::DontResolveSymlinks));
     
    /* info: *mydirectory = /home/users/projects/ */
    }
     
     
    QString MainWindow::getDirName() const                              
    {
            return *mydirectory;                <------------------------------------------   // The program has crashed. 
    }

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 585
    Points
    188 585
    Par défaut
    Citation Envoyé par lucie1985 Voir le message
    meme en declarant mydirectory comme pointeur, il reste impossible de rappeller cette meme valeur en hors du Slot "selectdirectory()". La declaration d'un QString comme pointeur semble faire des problemes!
    Justement, c'est pour ça que je parlais d'éviter tout pointeur dans le coin, tu n'en a pas besoin.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

Discussions similaires

  1. [débutant] renvoyer une valeur
    Par mitherkiller dans le forum C
    Réponses: 18
    Dernier message: 19/02/2007, 22h56
  2. Renvoyer une valeur dans un textarea
    Par psycho34 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 28/11/2006, 20h27
  3. Renvoyer une valeur d'une page à une autre
    Par mullger dans le forum Langage
    Réponses: 2
    Dernier message: 26/10/2006, 11h04
  4. [C#] Renvoyer une valeur à la fermeture d'une forms
    Par diaboloche dans le forum Windows Forms
    Réponses: 6
    Dernier message: 14/03/2006, 11h54
  5. Réponses: 1
    Dernier message: 22/09/2005, 15h46

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