Récupération d'une donnée par écoute [GTK] [Résolu/Fermé]

Signaler
Messages postés
447
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
1 octobre 2014
-
Messages postés
447
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
1 octobre 2014
-
Bonjour,
J'ai un problème pour récupérer une donnée que je ne pense pas bien passer en paramètre d'une fonction car cette fonction est une écoute de bouton. J'ai tout de même essayé en procédant comme ceci: (la variable que je souhaite récupérer étant cheminFichierFil)
dans mon main. cpp (l'interface graphique) :
Pour l'écoute du bouton de récupération de valeur:
g_signal_connect(G_OBJECT(BoutonFil), "clicked", G_CALLBACK(TraitementBoutonFil), NULL);


Dans le code de l'écouteur (TraitementBoutonFil):
switch(gtk_dialog_run(GTK_DIALOG(FenetreSelection)))  
    {  
        case GTK_RESPONSE_OK:  
            //Recuperation du chemin  
            cheminFichierFil = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection));  
            gtk_entry_set_text(GTK_ENTRY(EntryFil), cheminFichierFil);  
        break;  
        default:  
            //[aucune instruction]  
        break;  
    }

Pour lécoute du bouton lancant le modèle:
g_signal_connect(G_OBJECT(BoutonGen), "clicked", G_CALLBACK(TraitementBoutonGen), NULL);

Et dans mon generateur.cpp:
<code>void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPro,
Continuite continuite, Isolement isolement)
{
printf("%s",cheminFichierFil);
etc.
}
Le printf me retourne toujours null. Quelqu'un pourrait-il me dire pourquoi la valeur est toujours à null alors que mon entry est bien modifié? (sachant que je déclare mon cheminFichierFil dans mon generateur.cpp, mais hosr de la fonction TraitementBoutonGen)

5 réponses

Messages postés
447
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
1 octobre 2014
9
Up s'il vous plait.
Messages postés
447
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
1 octobre 2014
9
Up?
Messages postés
447
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
1 octobre 2014
9
Up again ...
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 248
ton problème est mal posé. Il aurait fallu mettre [GTK] dans le titre, car le problème est lié. Ensuite, tu ne mets que des morceaux de code sans que l'on sache comment ils s'agencent entre eux.
le mieux : simplifie ton problème jusqu'à ce qu'il n'y ait plus que ça dans ton code et envoie le.
Messages postés
447
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
1 octobre 2014
9
Salut et merci de t'interresser à mon problème. =)
Je n'ai pas très bien compris ce que tu m'a dis... Justement, j'ai essayé de simplifier mon code pour toutes les instances de cheminFichierFil. (Bon ok j'ai oublié le generateur.h):
extern gchar* cheminFichierFil;


Mais, c'est vrai que c'est un peu "prise de tête", je t'explique donc tout en détail:

Tout d'abord en ce qui concerne les liens entre mes fichiers:
Il y a 3 fichier:
-le main.cpp
-le generateur.cpp
-le generateur.h

Dans le main.cpp et le generateur.cpp, il y a:
#include "generateur.h"


Dans le generateur.h, il y a (entre autres variable non relatives au problème):
#ifndef generateurh 
#define generateurh 

#include <stdlib.h> 
#include <gtk/gtk.h> 
#include <stdio.h> 
#include <string.h> 
//chemin du fichier des connections 
    extern gchar* cheminFichierFil; 
//Génère le code du programme winpass 
    void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPro,Continuite continuite, Isolement isolement); 
#endif


En ce qui concerne le "parcours" du programme:

Au début, le lancement du main.

Le main est l'interface graphique, il y a donc une fenetre qui s'ouvre, et un bouton(dans cette fenêtre principale) qui est en écoute de click et déclanche la fonction suivante:
g_signal_connect(G_OBJECT(BoutonFil), "clicked", G_CALLBACK(TraitementBoutonFil), NULL);


Cette fonction ouvre un chooser dialog permettant de parcourir les fichiers et modifie la valeur de cheminFichierFil de cette façon lorsque l'on click sur le bouton OK de cette dialog:
cheminFichierFil = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(FenetreSelection));


Il me semble que tout se passe bien jusque là puisque quand je modifie un champ de texte avec le chemin du fichier, il me l'affiche bien.

De retour à la fenêtre principale, j'ai un autre bouton (le bouton "générer"), qui pour son écouteur a ce code:
g_signal_connect(G_OBJECT(BoutonGen), "clicked", G_CALLBACK(TraitementBoutonGen), NULL);


Cette fonction (TraitementBoutonGen) est dans le generateur.cpp et à ce corps (entre autre):
void TraitementBoutonGen(GtkWidget* pWidget, gchar* cheminFichierFil, gchar* cheminFichierPro, Continuite continuite, Isolement isolement) 
{ 
printf("%s",cheminFichierFil); 
//et pleins d'autres truc qui n'ont aucun rapport 
}

Et là, c'est le drame, le printf m'affiche un null...

Je sais pas si c'est beaucoup plus clair, mais tu peux voir que j'ai fais de mon mieux.=)

Ma question est donc: sais-tu comment je peux faire pour récupérer le chemin du fichier que j'ai choisi dans ma chooser dialog?

Encore merci,
Sheeps.

PS: si tu ne comprends toujours pas dis moi comment je peux mieux te renseigner et j'essayerais de m'appliquer.

PSS: la déclaration:
gchar* cheminFichierFil;

est situé dans le generateur.cpp, juste après le include du generateur.h (donc bien avant le code)
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 248
ok, c'est plus clair.
Mon problème est le suivant : je ne connais pas GTK, mais j'ai de bonnes notions en QT. Je n'avais jamais autant vu de code Gtk, mais le principe semble être le même.
En l'état, je ne comprend même pas comment le programme peut faire pour savoir avec quels arguments appeler ta fonction TraitementBoutonGen... En tout cas, comme ta variable cheminFichierFil est une variable globale, rien ne sert de la passer en paramètre. Si tu vire ce paramètre, ça devrais fonctionner.
Messages postés
447
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
1 octobre 2014
9
Wow bah alors toi t'es efficace =), merci !
Bon après, ce n'est pas parfait, il me trouve bien la variable cheminFichierFil, mais il me garde ma valeur par défaut et ne me prend pas en compte sa modification au moment de son choix dans la chooser dialog.
J'essaye de situer le problème et je te tiens au courant si je n'y arrive pas tout seul.
Encore merci !
Messages postés
447
Date d'inscription
jeudi 19 mai 2011
Statut
Membre
Dernière intervention
1 octobre 2014
9
Bon en fait j'aurais qu'à lire l'entry ou mon chemin est mis et je pourrais récupérer la valeur. Je met donc résolu. Merci encore ! Après une semaine de galère ton aide m'a vraiment été précieuse ! (même si ca n'avait pas l'air très compliqué avec du recul ^^ )