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 :

Valeur de retour de gtk_spin_button_new_with_range


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Par défaut Valeur de retour de gtk_spin_button_new_with_range
    Bonjour à tous,
    Voilà je suis sur GTK, et je veux utiliser 81 fois gtk_spin_button_new_with_range, dans ma fonction main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(ligne=1;ligne<=9;ligne++){
        for(colonne=1;colonne<=9;colonne++){
            pCase[ligne][colonne] = gtk_spin_button_new_with_range(0, 9, 1);
    	gtk_table_attach_defaults(GTK_TABLE(pTable), pCase[ligne][colonne], colonne, colonne+1, ligne, ligne+1);  
        }
    }
    J'ai donc déclarer en dehors de la fonction main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GtkWidget *pCase[10][10];
    Je voudrais maintenant enregistrer le contenu de ces cases dans un fichier, j'ai donc fait:
    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
    29
    30
    void OnEnregistrer(){
      GtkWidget *selection;
     
      selection = gtk_file_selection_new( g_locale_to_utf8( "Sélectionnez un fichier", -1, NULL, NULL, NULL) );
      gtk_window_set_icon_from_file(GTK_WINDOW(selection), "favicon.ico", NULL);
      gtk_widget_show(selection);
     
      //On interdit l'utilisation des autres fenetres.
      gtk_window_set_modal(GTK_WINDOW(selection), TRUE);
     
      g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(selection)->ok_button), "clicked", G_CALLBACK(recuperer_chemin), selection );
     
      g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(selection)->cancel_button), "clicked", G_CALLBACK(gtk_widget_destroy), selection);
    }
     
    void recuperer_chemin (GtkWidget *bouton, GtkWidget *file_selection){
      int contenu,ligne, colonne;
      const gchar* chemin;
      GtkWidget *dialog;
      FILE *f;
      chemin=gtk_file_selection_get_filename(GTK_FILE_SELECTION (file_selection));
      f=fopen(chemin,"w");
      for(ligne=1 ;ligne<=9;ligne++){
        for(colonne=1;colonne<=9;colonne++){
          contenu=gtk_spin_button_get_value_as_int(pCase[ligne][colonne]);  
          fprintf(f,"%d", contenu); 
        }
      } 
      gtk_widget_destroy(file_selection);
    }
    Si je compile on m'affiche comme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gtk.c: In function ‘recuperer_chemin’:
    gtk.c:183: attention : passing argument 1 of ‘gtk_spin_button_get_value_as_int’ from incompatible pointer type
    Sachant que la ligne 183 correspond à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contenu=gtk_spin_button_get_value_as_int(pCase[ligne][colonne]);

    Je n'arrive donc pas à comprendre l'erreur puisque j'ai bien défini mes pCases[10][10] à l'exterieur.
    Merci d'avance

  2. #2
    Membre Expert
    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
    Par défaut
    gtk_spin_button_get_value_as_int s'attend à avoir un GtkSpinButton * comme premier argument, et toi tu lui passes un GtkWidget * donc ton compilateur se plaint

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    contenu=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(pCase[ligne][colonne]));
    devrait passer.

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 13
    Par défaut
    Merci teuf13 pour cette réponse qui paraît bonne selon le compilateur.
    Par contre je ne la comprends pas trop
    Et comme j'aime bien comprendre plutôt que de recopié j'aurais voulu une petite explication si possible.
    En effet j'ai defini un GtkWidget pour le Spin_Button
    et je sais aussi qu'il faut pour gtk_spin_button_get_value_as_int(pCase[ligne][colonne]) que pCase[][] soit un type GtkButton.
    Mais je comprends pas pourquoi en rajoutant GTK_SPIN_BUTTON ça marche.
    Est ce que ça change le format de pCase???

    Merci en tout cas pour ton aide

  4. #4
    Membre Expert
    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
    Par défaut
    GTK_SPIN_BUTTON() c'est une macro C qui fait des vérifications sur le type de ton objet (des verifications spécifiques à gtk+) et qui fait un cast C pour dire au compilateur que l'objet de type GtkWidget de départ doit être considéré comme un objet de type GtkSpinButton. C'est équivalent à (GtkSpinButton *)mon_gtk_widget

  5. #5
    Invité de passage
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1
    Par défaut reponse
    essaye ça

    //enregirtrer les elements dans la matrice
    void enregistrement_matrice(){

    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    A[num(i,j)] = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(button[i][j]));

    }
    }

    for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
    {
    g_print("%10.2f \n",A[num(i,j)]) ;
    }
    }



    }

    //enregistrer les elements dans le vecteurs
    void enregistrement_vecteur(){

    for(i=0;i<n;i++)
    {
    b[i] = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(button[i][1]));
    }

    for(i=0;i<n;i++)
    {
    g_print("%10.2f \n", b[i]);
    }

    }

  6. #6
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    Par défaut
    Ce qu'il faut comprendre, c'est que GtkWidget est en quelque sorte une structure universelle pour tous les widgets, donc quand tu l'utilise, le compilateur n'a accès qu'au membres de la structure GtkWidget et il ne peut pas accéder aux membres de la structure GtkSpinButton qui sont propres à ce widget. En faisant un casting avec GTK_SPIN_BUTTON(), tu apporte cette connaissance au compilateur.

  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
    Par défaut
    Citation Envoyé par Tonux_samb Voir le message
    essaye ça
    En même temps, sa question date de plus de 3 ans, je ne suis pas sûr qu'il t'ait attendu pour aller de l'avant... Ça ne sert pas à grand chose de déterrer des sujets...

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

Discussions similaires

  1. Valeur de retour d'une procédure stockée
    Par Rudyweb dans le forum MFC
    Réponses: 4
    Dernier message: 25/02/2005, 17h52
  2. fonction operator, valeur de retour
    Par butch dans le forum C++
    Réponses: 21
    Dernier message: 20/09/2004, 10h30
  3. [VB6] Valeur de retour pour une Form
    Par preverse dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/08/2004, 17h16
  4. Valeur de retour d'une procédure externe
    Par elekis dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 16/04/2004, 16h45
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

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