Récupération d'une donnée par écoute [GTK] [Résolu/Fermé]
Signaler
cap'tain sheeps
cap'tain sheeps
- Messages postés
- 447
- Date d'inscription
- jeudi 19 mai 2011
- Statut
- Membre
- Dernière intervention
- 1 octobre 2014
cap'tain sheeps
- 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:
Dans le code de l'écouteur (TraitementBoutonFil):
Pour lécoute du bouton lancant le modèle:
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)
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)
A voir également:
- Récupération d'une donnée par écoute [GTK]
- Récupération d'une donnée par écoute ✓ - Forum - Programmation
- Récupérer base de données site internet ✓ - Forum - Internet / Réseaux sociaux
- Consommation de données pour écouter la radio - Forum - Mobile
- Récupérer toutes ses données Apple - Actualités
- Commande for /f : récupération d'une donnée dans un fichier ✓ - Forum - Autoit / batch
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
Up s'il vous plait.
cap'tain sheeps
- Messages postés
- 447
- Date d'inscription
- jeudi 19 mai 2011
- Statut
- Membre
- Dernière intervention
- 1 octobre 2014
Up?
cap'tain sheeps
- Messages postés
- 447
- Date d'inscription
- jeudi 19 mai 2011
- Statut
- Membre
- Dernière intervention
- 1 octobre 2014
Up again ...
Char Snipeur
- Messages postés
- 9688
- Date d'inscription
- vendredi 23 avril 2004
- Statut
- Contributeur
- Dernière intervention
- 2 octobre 2020
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.
le mieux : simplifie ton problème jusqu'à ce qu'il n'y ait plus que ça dans ton code et envoie le.
cap'tain sheeps
- Messages postés
- 447
- Date d'inscription
- jeudi 19 mai 2011
- Statut
- Membre
- Dernière intervention
- 1 octobre 2014
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):
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:
Dans le generateur.h, il y a (entre autres variable non relatives au problème):
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:
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:
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:
Cette fonction (TraitementBoutonGen) est dans le generateur.cpp et à ce corps (entre autre):
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:
est situé dans le generateur.cpp, juste après le include du generateur.h (donc bien avant le code)
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)
Char Snipeur
- Messages postés
- 9688
- Date d'inscription
- vendredi 23 avril 2004
- Statut
- Contributeur
- Dernière intervention
- 2 octobre 2020
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.
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.
cap'tain sheeps
- Messages postés
- 447
- Date d'inscription
- jeudi 19 mai 2011
- Statut
- Membre
- Dernière intervention
- 1 octobre 2014
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 !
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 !
cap'tain sheeps
- Messages postés
- 447
- Date d'inscription
- jeudi 19 mai 2011
- Statut
- Membre
- Dernière intervention
- 1 octobre 2014
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 ^^ )