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

GTK+ avec C & C++ Discussion :

Récupération de chemin de fichier dans le "main"


Sujet :

GTK+ avec C & C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Récupération de chemin de fichier dans le "main"
    Salut,

    j'ai un problème, j'aimerais récupérer le chemin d'accès d'un fichier sélectionné avec "gtk_file_chooser_get_filename" dans le main du programme, je l'ai dans une fonction en dehors du main a laquelle je fais appel avec CALLBACK quand j'appuie sur un bouton , mais j'aimerais un moyen pour la récupérer dans le main.

    Merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Salut !


    Solution 1 mais pas sécuritaire, utiliser une variable globale mais c'est une pratique peu recommandable !

    Solution 2, utiliser une variable locale au main que tu fait transiter par le biais d'un pointeur jusqu'à ta fonction. C'est une pratique plus sécurisante car pas de variable globale mais il se peut que tu dois dans ce cas là, faire voyager ton pointeur vers plusieurs fonctions jusqu'à ce qu'il atteigne la fonction récupérant le chemin !

  3. #3
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Une fois gtk_main appelé dans le main, ton main ne sert plus à rien... Tout se gère par évènements... alors je me demande bien ce que tu veux faire dans ton main.
    Normalement tu crées dans le main une structure qui va contenir les infos de l'appli que tu veux regrouper ensemble. Ensuite tu passes l'adresse de cette structure en tant que paramètre user_data aux callbacks qui doivent lire ou écrire certains de ces membres. C'est là que ta callback pourra modifier ce chemin, qui sera accessible partout ailleurs.

    Et effectivement, les variables globales c'est crade et à éviter comme la peste, parce que tu finis souvent par ne plus savoir qui a modifié quoi...

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Salut !


    Solution 1 mais pas sécuritaire, utiliser une variable globale mais c'est une pratique peu recommandable !

    Solution 2, utiliser une variable locale au main que tu fait transiter par le biais d'un pointeur jusqu'à ta fonction. C'est une pratique plus sécurisante car pas de variable globale mais il se peut que tu dois dans ce cas là, faire voyager ton pointeur vers plusieurs fonctions jusqu'à ce qu'il atteigne la fonction récupérant le chemin !
    Salut Franck H ... Comment je peux transiter une variable locale jusqu'a une fonction ? .. je fais appel a la fonction en faisant connecter le signal d'un bouton a cette fonction ... Je vois pas comment une variable locale peut s'imisser dans g_signal_connect .. J'ai essayé ,avant de poser cette question sur le forum ( j'ai utilisé le pseudo de celtic fiddle) , de faire une variable interne a ma fonction sans succes.

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Une fois gtk_main appelé dans le main, ton main ne sert plus à rien... Tout se gère par évènements... alors je me demande bien ce que tu veux faire dans ton main.
    Normalement tu crées dans le main une structure qui va contenir les infos de l'appli que tu veux regrouper ensemble. Ensuite tu passes l'adresse de cette structure en tant que paramètre user_data aux callbacks qui doivent lire ou écrire certains de ces membres. C'est là que ta callback pourra modifier ce chemin, qui sera accessible partout ailleurs.

    Et effectivement, les variables globales c'est crade et à éviter comme la peste, parce que tu finis souvent par ne plus savoir qui a modifié quoi...
    Salut liberforce , comment je passe quelque chose en parametre user_data a ma callback ? une callback a 2 parametres .. jai mis a la place de gpointer data , gchar * chaine dans laquelle jai mis le chemin dont javais besoin mais toujours rien , quand je met le chemin dans un label et que je veux lafficher , ca marche pas !

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Il faut indiquer les données à transférer à ton callback au moment du g_signal_connect, c'est peut être ça que tu as oublié de faire. Sinon, il faudrait montrer un peu de code, ça irait plus vite pour trouver ce qui ne va pas. Par ailleurs, c'est expliqué dans les tutoriaux gtk+ tout ça.

  7. #7
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par krisss Voir le message
    Salut liberforce , comment je passe quelque chose en parametre user_data a ma callback ? une callback a 2 parametres .. jai mis a la place de gpointer data , gchar * chaine dans laquelle jai mis le chemin dont javais besoin mais toujours rien , quand je met le chemin dans un label et que je veux lafficher , ca marche pas !
    Regarde le champ data de g_signal_connect : il te permet de passer des données, comme par exemple l'adresse d'une variable ou d'une structure. Tu récupères ce champ quand tu rentres dans ta callback.

    Exemple pour la callback du signal "clicked" d'un GtkButton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    gboolean was_clicked = FALSE;
    GtkWidget *button = gtk_button_new_with_label ("cliquez moi");
    g_signal_connect (button, "clicked", on_button_clicked, &was_clicked);
     
    (...)
     
    void on_button_clicked (GtkButton *button, gpointer user_data)
    {
    	gboolean *was_clicked = user_data;
    	*was_clicked = TRUE;
    }

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Merci libeforce , ca marche impec' !

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/07/2007, 09h27
  2. Chemins de fichiers dans l'arborescence d'un projet
    Par sg.forums dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 31/10/2006, 09h33
  3. Réponses: 4
    Dernier message: 28/08/2006, 14h47

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