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 :

Problème avec les zones de text


Sujet :

GTK+ avec C & C++

  1. #1
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut Problème avec les zones de text
    Salut,

    J'essaye d'incorporer dans mon programme une fonction qui créé une zone de texte mais j'ai des soucis (trop d'étoiles pour moi ).

    Si j'ai bien compris, une zone de texte c'est en fait 3 widgets : la zone de texte, son buffer, et un autre widget pour la position courante dans le buffer.
    J'ai donc fait la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    	{
    		GtkWidget *pZtInfos;			/* Zone de texte */
    		GtkWidget *pTextBuffer; 	/* Buffer contenant le texte */
    		GtkWidget deb, end;			/* Marque le debut et la fin du buffer */
    	}ZoneDeTexte;
    Le code de ma fonction censée créé une ZoneDeTexte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /*Fonction qui crée une zone de texte*/
    void creerZoneText(ZoneDeTexte** pZTexte)
    {
      *pZTexte->pZtInfos = gtk_text_view_new();
    }
    Mais ça ne passe pas la compilation :
    src/outilsGraphique.c: In function ‘creerZoneText’:
    src/outilsGraphique.c:70: erreur: request for member ‘pZtInfos’ in something not a structure or union
    Le probleme vient surement des * mais j'avoue que je suis un peu perdu, y'en a trop !
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Probleme de priorite entre la fleche et l'etoile...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct A
    { int b;};
     
    void f(struct A **param)
    {
            //Pas bon, priorite sur le -> a la place du *
            *param->b = 1;
            //Correct!
            (*param)->b = 1;
    }

  3. #3
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Ok merci pour l'infos.
    J'ai corrigé mon code et l'ai complété (recuperation du buffer, du debut et de la fin de celui-ci), mais ça passe pas du tout la compilation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /*Fonction qui crée une zone de texte*/
    void creerZoneText(ZoneDeTexte** pZTexte)
    {
    	(*pZTexte)->pZtInfos = gtk_text_view_new();
    	(*pZTexte)->pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW((*pZTexte)->pZtInfos));
    	gtk_text_buffer_get_start_iter((*pZTexte)->pTextBuffer, &((*pZTexte)->deb));
    	gtk_text_buffer_get_end_iter((*pZTexte)->pTextBuffer, &((*pZTexte)->end));
    }
    cc1: warnings being treated as errors
    src/outilsGraphique.c: In function ‘creerZoneText’:
    src/outilsGraphique.c:71: attention : assignment from incompatible pointer type
    src/outilsGraphique.c:72: attention : passing argument 1 of ‘gtk_text_buffer_get_start_iter’ from incompatible pointer type
    src/outilsGraphique.c:72: attention : passing argument 2 of ‘gtk_text_buffer_get_start_iter’ from incompatible pointer type
    src/outilsGraphique.c:73: attention : passing argument 1 of ‘gtk_text_buffer_get_end_iter’ from incompatible pointer type
    src/outilsGraphique.c:73: attention : passing argument 2 of ‘gtk_text_buffer_get_end_iter’ from incompatible pointer type
    make: *** [obj/outilsGraphique.o] Erreur 1
    Si peu de code pour autant d'erreurs, ça le fait pas
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  4. #4
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    En relisant mon cours, je me suis apperçu que ma structure était tres mauvaise..
    La revoici, bien meilleure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Structure de donnees */
    typedef struct
    	{
    		GtkWidget *pZtInfos;			/* Zone de texte */
    		GtkTextBuffer *pTextBuffer; 	/* Buffer contenant le texte */
    		GtkTextIter deb, end;			/* Marque le debut et la fin du buffer */
    	}ZoneDeTexte;
    Maintenant, ce code compile nikel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /*Fonction qui crée une zone de texte*/
    void creerZoneText(ZoneDeTexte** pZTexte)
    {
    	(*pZTexte)->pZtInfos = gtk_text_view_new();
    	(*pZTexte)->pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW((*pZTexte)->pZtInfos));
    	gtk_text_buffer_get_start_iter((*pZTexte)->pTextBuffer, &((*pZTexte)->deb));
    	gtk_text_buffer_get_end_iter((*pZTexte)->pTextBuffer, &((*pZTexte)->end));
    }
    J'ai pas encore eut le temps de le tester...je croise les doights
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il faut que tu fasses attention aux prototypes des fonctions...

    Voici les definitions des fonctions que t'utilises:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GtkTextBuffer* gtk_text_view_get_buffer     (GtkTextView *text_view);
    void gtk_text_buffer_get_start_iter (GtkTextBuffer *buffer, GtkTextIter *iter); 
    void gtk_text_buffer_get_end_iter(GtkTextBuffer *buffer, GtkTextIter *iter);
    Or toi tu les utilises comme si c'etait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GtkWidget* gtk_text_view_get_buffer     (GtkTextView *text_view);
    void gtk_text_buffer_get_start_iter (GtkWidget *buffer, GtkWidget *iter); 
    void gtk_text_buffer_get_end_iter(GtkWidget *buffer,GtkWidget *iter);
    Logique qu'il ne soit pas d'accord

  6. #6
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par fearyourself
    Il faut que tu fasses attention aux prototypes des fonctions...

    Voici les definitions des fonctions que t'utilises:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GtkTextBuffer* gtk_text_view_get_buffer     (GtkTextView *text_view);
    void gtk_text_buffer_get_start_iter (GtkTextBuffer *buffer, GtkTextIter *iter); 
    void gtk_text_buffer_get_end_iter(GtkTextBuffer *buffer, GtkTextIter *iter);
    Or toi tu les utilises comme si c'etait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GtkWidget* gtk_text_view_get_buffer     (GtkTextView *text_view);
    void gtk_text_buffer_get_start_iter (GtkWidget *buffer, GtkWidget *iter); 
    void gtk_text_buffer_get_end_iter(GtkWidget *buffer,GtkWidget *iter);
    Logique qu'il ne soit pas d'accord
    Oui oui désolé je me suis apperçu de mon erreur de lecture....
    Lis mon post précédent, je me suis deja auto-flagéler
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  7. #7
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Je viens de tester ==> segmentation fault (decidemment c'est ma journée )

    Voici le code final.
    Les structures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct
    	{
    		GtkWidget *pZtInfos;			/* Zone de texte */
    		GtkTextBuffer *pTextBuffer; 	/* Buffer contenant le texte */
    		GtkTextIter deb, end;			/* Marque le debut et la fin du buffer */
    	}ZoneDeTexte
    typedef struct
    	{
    		GtkWidget *pFenetre;			/* Fenetre principale */
    		/* ... */
    		ZoneDeTexte *pZTexte;		/* Zone de texte */
    	}data;
    La fonction créant une zone de texte et l'ajoutant dans une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* Fonction qui crée et ajoute une zone de texte dans une table*/
    void creerAjouterZoneText(ZoneDeTexte** pZTexte,GtkWidget *pTable,guint left, guint right, guint top, guint bottom)
    {
    	(*pZTexte)->pZtInfos = gtk_text_view_new();
    	(*pZTexte)->pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW((*pZTexte)->pZtInfos));
    	gtk_text_buffer_get_start_iter((*pZTexte)->pTextBuffer, &((*pZTexte)->deb));
    	gtk_text_buffer_get_end_iter((*pZTexte)->pTextBuffer, &((*pZTexte)->end));
      	gtk_table_attach_defaults(GTK_TABLE(pTable),(*pZTexte)->pZtInfos,left,right,top,bottom);
    }
    Le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       /* ... */
       data myData;
       /* ...*/
       creerAjouterZoneText(&myData.pZTexte,pTable,2,3,3,6);
       /* ... */
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       (*pZTexte)->pZtInfos = gtk_text_view_new();
    Comme toute allocation dynamique, gtk_text_view_new doit rendre un pointeur NULL s'il y a un probleme... Verifie si c'est le cas...

    Ensuite, je ne comprends pas pourquoi tu ne vires pas une des indirections...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /* Fonction qui crée et ajoute une zone de texte dans une table*/
    void creerAjouterZoneText(ZoneDeTexte* pZTexte,GtkWidget *pTable,guint left, guint right, guint top, guint bottom)
    {
       pZTexte->pZtInfos = gtk_text_view_new();
       pZTexte->pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pZTexte->pZtInfos));
       gtk_text_buffer_get_start_iter(pZTexte->pTextBuffer, &(pZTexte->deb));
       gtk_text_buffer_get_end_iter(pZTexte->pTextBuffer, &(pZTexte->end));
         gtk_table_attach_defaults(GTK_TABLE(pTable),pZTexte->pZtInfos,left,right,top,bottom);
    }
    Et enfin, mon petit doigt me dit que tu n'alloues pas dynamiquement pZTexte entre ta creation de ta variable data et ton appel a creerAjouterZoneTexte... Ce qui biensur est une erreur classique et grave...

    Remarque: Est-ce qu'il faut que ce soit un pointeur? Pourquoi ne pas faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef struct
       {
          GtkWidget *pFenetre;         /* Fenetre principale */
          /* ... */
          ZoneDeTexte pZTexte;      /* Zone de texte */
       }data;

  9. #9
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Ok apres avoir un peu mieux reflechis, j'ai corrigé mon code, maintenant ça fonctionne bien. J'ai codé une fonction servant à ajouter du texte dans la zone.
    Voila le code final :

    Les structures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct
    	{
    		GtkWidget *pFenetre;			/* Fenetre principale */
                   /* ... */
    		ZoneDeTexte pZTexte;		/* Zone de texte *
    	}data;
    typedef struct
    	{
    		GtkWidget *pZtInfos;			/* Zone de texte */
    		GtkTextBuffer *pTextBuffer; 	/* Buffer contenant le texte */
    		GtkTextIter deb, end;			/* Marque le debut et la fin du buffer */
    	}ZoneDeTexte;
    Les fonctions :
    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
    /* Fonction qui crée et ajoute une zone de texte dans une table*/
    void creerAjouterZoneText(ZoneDeTexte* pZTexte,GtkWidget *pTable,guint left, guint right, guint top, guint bottom)
    {
    	pZTexte->pZtInfos = gtk_text_view_new();
    	pZTexte->pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pZTexte->pZtInfos));
    	gtk_text_buffer_get_start_iter(pZTexte->pTextBuffer, &(pZTexte->deb));
    	gtk_text_buffer_get_end_iter(pZTexte->pTextBuffer, &(pZTexte->end));
      	gtk_table_attach_defaults(GTK_TABLE(pTable),pZTexte->pZtInfos,left,right,top,bottom);
    }
     
    /* Fonction qui ajoute du texte dans la zone de texte */
    void ajouterText(ZoneDeTexte *pZTexte,const gchar *text)
    {
    	gtk_text_buffer_insert(pZTexte->pTextBuffer,&(pZTexte->end),text,strlen(text));
    }
    L'appel dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creerAjouterZoneText(&myData.pZTexte,pTable,2,4,3,6)
    Merci pour votre aide.
    Bonne soirée
    Sorry
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

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

Discussions similaires

  1. Sauvegarde RTF (Pble avec les "Zone de texte")
    Par Phil77 dans le forum Rave
    Réponses: 0
    Dernier message: 07/08/2008, 14h52
  2. Réponses: 3
    Dernier message: 23/01/2006, 10h10
  3. bloquer les zones de textes en écriture
    Par seb59dk dans le forum IHM
    Réponses: 10
    Dernier message: 09/09/2005, 10h15
  4. débloquer les zones de textes pour modif
    Par seb59dk dans le forum IHM
    Réponses: 1
    Dernier message: 09/09/2005, 09h56
  5. [FORMS] Ecrire dans les zones de texte
    Par popov2 dans le forum Oracle
    Réponses: 7
    Dernier message: 17/08/2005, 15h53

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