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+ Discussion :

Probléme pour faire "agir" les comboBox


Sujet :

GTK+

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Probléme pour faire "agir" les comboBox
    Bonjour, voici mon probléme

    je cré une ComboBox simple avec quelques elements que j'insére avec un bouton dans une table


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /*** Creation de GtkComboBox ***/
        mainWindow->pComboBox = gtk_combo_box_new_text();
        /* Ajout de GtkComboBox */
        gtk_table_attach_defaults(GTK_TABLE(mainWindow->tablePrincipale),mainWindow->pComboBox,21, 29, 4, 5);
        gtk_table_attach(GTK_TABLE(mainWindow->tablePrincipale),mainWindow->personnageButton[0],21, 29, 5, 6,GTK_EXPAND, GTK_EXPAND | GTK_FILL,0, 0);
     
     
        /* Ajout des elements */
        gtk_combo_box_append_text(GTK_COMBO_BOX(mainWindow->pComboBox), "Selection1");
        gtk_combo_box_append_text(GTK_COMBO_BOX(mainWindow->pComboBox), "Selection2");
        gtk_combo_box_append_text(GTK_COMBO_BOX(mainWindow->pComboBox), "Selection3");


    J'ai créé une fonction de callback qui fait que quand on clic sur le bouton, un message diferent aparait dans al console en fonction de l'element "actif" de la GTK ComboBox (je sais pas si je suis clair)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //fonction callback
       g_signal_connect (G_OBJECT (mainWindow->personnageButton[0]), "clicked", G_CALLBACK (FonctionBestiaireComboBox), mainWindow->pComboBox);


    et voici ma fonction appelé par le bouton
    La comboBox et le bouton se trouve dans une structure "Window"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    static void FonctionBestiaireComboBox(GtkWidget * widget, gpointer data)
    {
        Window* mainWindow;
     
    	mainWindow = ( Window*) data;
     
       gint index = -1;
     
     
       index = gtk_combo_box_get_active (GTK_COMBO_BOX (mainWindow->pComboBox));
       switch (index)
    {
    case 0:
      printf("selection1!");
      break;
    case 1:
      printf("selection2!");
      break;
     
    default:
      printf("Je n'ai aucune phrase de prete pour cette selection  ");
      break;
     
     
       (void) widget;
    }
     
    }

    Le code fonctionne, aucun warning, aucune erreur pourtant quand je clic sur le bouton, c'est toujours selection1 qui s'affiche dans la console, peut importe l'element séléctioné de la combobox


    selection1

    même si j'active par defaut la selection2


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_combo_box_set_active (GTK_COMBO_BOX (mainWindow->pComboBox), 1);

    Tout ça m'améne à penser que le probléme se situe au niveau de la fonction static void FonctionBestiaireComboBox ou à ma fonction callback voila, je peut fournir tout le code si vous voulez, je voulais aps surcharger le post

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    Citation Envoyé par Formgroth Voir le message
    Le code fonctionne, aucun warning, aucune erreur pourtant quand je clic sur le bouton, c'est toujours selection1 qui s'affiche dans la console, peut importe l'element séléctioné de la combobox
    Aucun warning ?! Ça m'étonnerai, au moins lors de l'exécution puisque lors de la connexion du signal tu passe en argument la combo box et ensuite, dans la fonction de rappel, tu l'utilise comme une fenêtre !

    Une bonne habitude à prendre est de tester la validité des paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static void FonctionBestiaireComboBox(GtkWidget * widget, gpointer data)
    {
      g_return_if_fail (data != NULL);
      g_return_if_fail (GTK_IS_COMBO_BOX (data));
     
      /* ... */
    }
    Si tu respecte les bonnes pratiques, Window doit aussi être une classe (je suppose dérivée de GtkWindow) et disposée des mêmes macro de vérification

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    en effet, j'ai ajouté la verif et j'ai ca en console quand je lance:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Gtk-CRITICAL **:gtk_box_pack_start : assertion child->parent assertion == NULL failed

    et ca quand je clique sur le bouton qui fait appel à la fonction


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CRITICAL **:FonctionBestiaireComboBox: assertion GTK_IS_COMBO_BOX <data> Failed

    J'ai aps compris où était le probléme, en fait le tout est dans une structure je doit modifier quoi? ma fonction de connect?

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Formgroth Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Gtk-CRITICAL **:gtk_box_pack_start : assertion child->parent assertion == NULL failed
    Là, à première vue, tu essais d'ajouter un widget qui est déjà dans une boite.


    Citation Envoyé par Formgroth Voir le message
    J'ai aps compris où était le probléme, en fait le tout est dans une structure je doit modifier quoi? ma fonction de connect?
    Le dernier paramètre de la fonction g_signal_connect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     g_signal_connect (G_OBJECT (mainWindow->personnageButton[0]), "clicked", G_CALLBACK (FonctionBestiaireComboBox), mainWindow->pComboBox);
    C'est ce que tu récupère dans le paramètre data de la fonction de rappel.

    Tu passe une GtkComboBox puis tu force le cast en Window, il faut que ce soit cohérent.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Excelent, Merci beaucoup


    d'accord oui, j'ai corrigé et ça fonctionne trés bien merci

    par contre pour le premier warning de la console je comprend pas trop

    j'ai aussi un second petit probléme

    quand je clique sur un bouton, l'image dans une frame change


    mais si l'image est grande, il afut cliquer 2 fois sur le bouton pour que l'image s'affiche

    et j'ai ceci dans al console

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GTK-CRITICAL **: gtk_widget_destroy: assertion 'GTK_IS_WIDGET<widget>' Failed
    ça doit venir du fait que je détruit tout les widget au debut de ma fonction pour pouvoir les réutiliser non?

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

Discussions similaires

  1. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13
  2. [SQL] problème pour faire ma requete
    Par seb.briet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/12/2004, 16h51
  3. [FLASH MX2004] Problème pour faire un bouton play
    Par melanie075 dans le forum Flash
    Réponses: 13
    Dernier message: 16/12/2004, 22h55

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