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 :

Comment connecter le même signal deux fois ?


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 29
    Points : 31
    Points
    31
    Par défaut Comment connecter le même signal deux fois ?
    Salut à tous

    Bon voilà, je suis débutant en GTK et suite au click sur un bouton, j'ai besoin de faire un test sur le contenu d'un "text entry", afficher un message_dialog s'il y a erreur, si ça se passe correctement, je récupère le contenu d'un "file chooser" et je continue mon traitement.
    Le problème qui se présente, c'est qu'une fois j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT (app.pButton), "clicked", G_CALLBACK (onClick), app.pEntry[1]);
    J'arrive à récupérer le texte de l'entry:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void onClick(GtkWidget *pBtn, gpointer data)
    {
     
      GtkEntry *pEntry = data;
      gchar *sText =gtk_entry_get_text(pEntry);
     
    GtkWidget *pWindow = gtk_widget_get_toplevel(GTK_WIDGET(data));
     
    // ici j'appelle le gtk_message_dialog
     
    }
    Mais après pour récupérer ce qui se trouve dans le "file_chooser", je peux même pas y accéder puisque g_connect ne reçoit qu'un pointeur à la fois. J'ai besoin de faire passer deux pointeurs sur deux widgets suite à l'émission d'un même signal d'un même bouton.

    Est ce que cette manière est correcte à utiliser??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g_signal_connect(G_OBJECT (app.pButton), "clicked", G_CALLBACK (onClick1), app.pEntry[1]);
    g_signal_connect(G_OBJECT (app.pButton), "clicked", G_CALLBACK (onClick2), app.fileChooser);
    Ou est ce qu'il y a une bonne manière pour y arriver ?

    A savoir que j'utilise une structure pour rassembler mes widgets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct _fenetre{
    GtkWidget *pWindow;
    GtkWidget *pVBox;
    GtkWidget *pVtree;
    GtkWidget *pHBox[3];
    GtkWidget *pButton;
    GtkWidget *pEntry[4];
    GtkWidget *pLabel[4];
    GtkWidget *fileChooser;
    };

    Merci d'avance pour toutes les réponses

  2. #2
    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
    Passe &app comme paramètre gpointer data. Ainsi tu auras accès à tous tes widgets à partir de la callback:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT (app.pButton), "clicked", G_CALLBACK (onClick1), &app);

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Passe &app comme paramètre gpointer data. Ainsi tu auras accès à tous tes widgets à partir de la callback:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT (app.pButton), "clicked", G_CALLBACK (onClick1), &app);
    Merci beaucoup Je croyais que gpointer ne pourvait pointer que sur des types propres à GTK

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    J'ai remplacé la connexion par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT (app.pButton), "clicked", G_CALLBACK (onClick), &app);
    et j'ai commencé à modifier la fonction de callback, mais le programme plante suite à l'appui sur le bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void onClick(GtkWidget *pBtn, gpointer data)
    {
     
      struct _fenetre* app;
      app = (struct _fenetre*)data;
      GtkEntry *pEntry = &(app->pEntry[1]);
      gchar *sText =gtk_entry_get_text(pEntry);
     
    // le reste est mis en commentaire, seulement ce bout de code est compilé pour l'instant
     
    }
    Est ce qu'il y aurait une erreur que j'ai pas pu voir ??

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 304
    Points : 4 971
    Points
    4 971
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par bkwaadbk Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void onClick(GtkWidget *pBtn, gpointer data)
    {
    
      struct _fenetre* app;
      app = (struct _fenetre*)data;
      GtkEntry *pEntry = &(app->pEntry[1]);
      gchar *sText =gtk_entry_get_text(pEntry);
    }
    Pourquoi vouloir accéder à l'adresse du pointeur du GtkEntry (en rouge). Il y a une petite confusion dans la gestion des pointeurs. Un simple GtkEntry *pEntry = app->pEntry[1]; suffit.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Pourquoi vouloir accéder à l'adresse du pointeur du GtkEntry (en rouge). Il y a une petite confusion dans la gestion des pointeurs. Un simple GtkEntry *pEntry = app->pEntry[1]; suffit.
    Ah oui J'avais modifié un peu le code et j'ai oublié de supprimer le & :/

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] empêcher l'ouverture d'une même fenêtre deux fois
    Par alex1005 dans le forum WinDev
    Réponses: 3
    Dernier message: 13/01/2014, 10h55
  2. Déploiement de la même application deux fois sur un serveur
    Par koyuki90 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 09/07/2012, 15h10
  3. Comment connecter 2 ordinaeurs avec deux clé USB wireless
    Par pierrot10 dans le forum Dépannage et Assistance
    Réponses: 1
    Dernier message: 08/03/2012, 14h22
  4. Réponses: 10
    Dernier message: 18/07/2007, 18h36
  5. Sélectionner un même enregistrement deux fois...
    Par Manu0086 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 02/02/2004, 14h09

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