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

Résolu/Fermé
cap'tain sheeps Messages postés 447 Date d'inscription jeudi 19 mai 2011 Statut Membre Dernière intervention 1 octobre 2014 - Modifié par cap'tain sheeps le 31/05/2011 à 14:54
cap'tain sheeps Messages postés 447 Date d'inscription jeudi 19 mai 2011 Statut Membre Dernière intervention 1 octobre 2014 - 31 mai 2011 à 16:20
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

cap'tain sheeps Messages postés 447 Date d'inscription jeudi 19 mai 2011 Statut Membre Dernière intervention 1 octobre 2014 10
25 mai 2011 à 09:45
Up s'il vous plait.
0
cap'tain sheeps Messages postés 447 Date d'inscription jeudi 19 mai 2011 Statut Membre Dernière intervention 1 octobre 2014 10
27 mai 2011 à 08:43
Up?
0
cap'tain sheeps Messages postés 447 Date d'inscription jeudi 19 mai 2011 Statut Membre Dernière intervention 1 octobre 2014 10
31 mai 2011 à 13:37
Up again ...
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
31 mai 2011 à 14:17
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cap'tain sheeps Messages postés 447 Date d'inscription jeudi 19 mai 2011 Statut Membre Dernière intervention 1 octobre 2014 10
Modifié par cap'tain sheeps le 31/05/2011 à 15:36
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)
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
31 mai 2011 à 15:57
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.
0
cap'tain sheeps Messages postés 447 Date d'inscription jeudi 19 mai 2011 Statut Membre Dernière intervention 1 octobre 2014 10
31 mai 2011 à 16:04
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 !
0
cap'tain sheeps Messages postés 447 Date d'inscription jeudi 19 mai 2011 Statut Membre Dernière intervention 1 octobre 2014 10
31 mai 2011 à 16:20
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 ^^ )
0