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 :

Remplir une table fonction Callback


Sujet :

GTK+ avec C & C++

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Remplir une table fonction Callback
    Bonjour à tous,

    J'utilise pour la première fois Gtk+ dans un programme pour un Sudoku en C++.
    Mon interface est composé d'une fenêtre dans laquelle j'ai inséré une table avec uniquement deux colonne, la première contient un menu et la seconde une nouvelle table de 4x4.

    J'ai les 5 Widget suivant :

    GtkWidget *fenetre;
    GtkWidget *table;
    GtkWidget *menu;
    GtkWidget *tableau;
    GtkWidget *grille[4] [4];

    Dans mon menu j'ai un bouton défini comme ceci :

    button1 = gtk_button_new_with_label ("Nouvelle grille");
    gtk_widget_ref (button1);
    gtk_box_pack_start (GTK_BOX (vbox_menu), button1, FALSE, TRUE, 15);

    Je souhaiterai faire en sorte qu'en cliquant sur mon bouton, je puisse modifier les valeurs de ma grille en utilisant une fonction "nouvelleGrille". Je n'y arrive pas.

    J'aimerais savoir ce que vous mettriez à la place de NULL dans la ligne suivante où dans la fonction "nouvelleGrille" pour lui permettre de modifier la grille.

    gtk_signal_connect (GTK_OBJECT (button1), "clicked", G_CALLBACK(nouvelleGrille),NULL);

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

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Pour répondre plus génériquement, la dernière variable de la fonction g_signal_connect(); permet de transmettre à la fonction CALLBACK une donnée utilisateur sous la forme d'un pointeur.
    La plupart des développeurs crée une structure dans laquelle on trouve tous les widgets nécessaires à l'interface, déclare ensuite une variable du type de cette structure et la transmette comme pointeur.
    Ainsi on peut accéder à tout moment à un widget de l'interface dans n'importe quel CALLBACK en s'affranchissant d'une déclaration en global.

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Si j'ai compris ce que tu as dis, je devrais faire ceci :

    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
     
    typedef struct
    {
              GtkWidget *fenetre;
              GtkWidget *table;
              GtkWidget *menu;
              GtkWidget *tableau;
              GtkWidget *grille[4] [4];
              GtkWidget *button1;
    } env;
     
    void nouvelleGrille ( gpointer data)
    {
            env = Env = data;
     
    [...]
     
    }
    et dans mon main on aura par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    env *Env;
     
    [...]
     
    gtk_signal_connect (GTK_OBJECT (env->button1), "clicked", G_CALLBACK(nouvelleGrille),env);
    edit : après avoir essayé de faire tout ça, j'ai un nouveau problème, dans ma fonction "nouvelleGrille"

    voici son prototype :

    static void nouvelleGrille(GtkWidget *pWidget, gpointer data);

    lorsque, dans celle si je fais :
    Env* env;
    env = data;

    le compilateur me dit : " invalid conversion from 'void*' to 'Env*'
    je pensais pourtant bien lui passer ce qu'il fallait
    gtk_signal_connect (GTK_OBJECT (env->button1), "clicked", G_CALLBACK(nouvelleGrille),env);

  4. #4
    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
    Tu ne respectes pas le prototype du signal "clicked" de GtkButton. Quand tu connectes un signal, la callback n'est pas choisie au pif : elle est imposée, et décrite dans la doc du signal en question.
    http://library.gnome.org/devel/gtk/s...Button-clicked
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/04/2014, 14h40
  2. Remplir une table en fonction d'une condition
    Par MaitrePylos dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 25/09/2013, 15h06
  3. [WD17] Fonction remplir une table
    Par xGuigui78 dans le forum WinDev
    Réponses: 8
    Dernier message: 27/12/2012, 16h06
  4. Réponses: 2
    Dernier message: 11/05/2009, 19h04
  5. remplir une table en fonction des résultats
    Par Psychomantis dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/10/2004, 12h22

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