Gtk textbuffer

Résolu/Fermé
mazareth Messages postés 271 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 5 mars 2019 - 27 mai 2009 à 21:04
mazareth Messages postés 271 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 5 mars 2019 - 28 mai 2009 à 18:45
Bonjour,
je suis en train de faire une interface les oncsigne sont utilisation obligatoire de glade.

Je vien donc de faire un essai.
l'interface et plutot belle mais j'aimerais la remplir.

l'idée et de remplir plein de zone de texte avec des labels.
J'essai donc de faire une sorte de printf dans la zone de texte ^^, ca donne:
[code]
GtkTextBuffer *txtbuf=NULL;

NumeroLigne = gtk_text_view_new_with_buffer(txtbuf); //creation du buffer en meme temps que le textview
gtk_text_buffer_set_text (txtbuf,"coucou",50); => erreur //ecriture dans le buffer
gtk_text_view_set_buffer(NumeroLigne,txtbuf); //ecriture dans textview
gtk_widget_show (NumeroLigne);
gtk_container_add (GTK_CONTAINER (scrolledwindow3), NumeroLigne);
gtk_widget_set_size_request (NumeroLigne, 30, -1);
gtk_text_view_set_editable (GTK_TEXT_VIEW (NumeroLigne), FALSE);
gtk_text_view_set_justification (GTK_TEXT_VIEW (NumeroLigne), GTK_JUSTIFY_RIGHT);

/code
ERREUR
(ihm:8786): Gtk-CRITICAL **: gtk_text_buffer_set_text: assertion `GTK_IS_TEXT_BUFFER (buffer)' failed


je me serre des docs https://www.gtk-fr.org/
et https://developer.gnome.org/gtk3/unstable/GtkTextBuffer.html


les fonctions on l'air de fonctioner d'ou viens cette erreur.
je n'ai jamais fait de GTK au cas ou.

dois je obligatoirement utiliser https://developer.gnome.org/gtk3/unstable/GtkTextBuffer.html#gtk-text-buffer-new

ca ma l'air plus simple ma methode. ( ca fonctionne pas aussi.)lol


dans l'attente de vos reponse.

aussi : quand on fait GTK_TEXT_VIEW (NumeroLigne) c'est un sorte de castage ou c'est juste indicationnel??

6 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
27 mai 2009 à 23:58
http://lists.ximian.com/pipermail/glade-users/2005-May/002493.html
http://forum.gtk-fr.org/viewtopic.php?id=4077

Bonne chance
1
Je ne me souviens plus de la fonction gtk_text_view_new_with_buffer (peut-être jadis n'existait-elle pas?), mais on voit tout de suite que ça ne tient pas la route.
GtkTextBuffer *txtbuf=NULL;
NumeroLigne = gtk_text_view_new_with_buffer(txtbuf);
En lisant ces 2 lignes, on voit poindre immédiatement le 'segment fault' !
A la fonction gtk_text_view_new_with_buffer, tu lui passes un pointeur initialisé à NULL (donc l'adresse du buffer est '0'), il y a alors 2 solutions:
- soit la fonction utilise cette adresse et c'est le plantage assuré,
- soit la fonction alloue elle-même de la mémoire et alors il y a 2 solutions:
----- soit la fonction demande l'adresse du pointeur (et non l'adresse pointée par celui-ci),
----- soit la fonction retourne un pointeur qu'il faudra sans doute récupérer (ne serait-ce que pour pouvoir le libérer).
Alors renseigne-toi sur cette fonction et je te souhaite une bonne continuation.
0
mazareth Messages postés 271 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 5 mars 2019 28
28 mai 2009 à 15:39
merci.
je pensai que ca initialisai simplement mon pointeur mais il est vrai que ca parrait bizar.


merci pour le lien 1 qui m'explique clairement mon erreur.

d'après Deletes current contents of buffer, and inserts text instead. If len is -1, text must be nul-terminated. text must be valid UTF-8.
il parle du '\0' terminal??

jvai essayer tous ca merci pour vos reponse.
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
28 mai 2009 à 15:42
Oui null terminated, ça veut dire qu'il faut un \0 en fin de chaîne.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mazareth Messages postés 271 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 5 mars 2019 28
28 mai 2009 à 16:58
ben tien en parlant de ca



Code
void EcrireDansTextView(GtkWidget *TextView, gchar *text)
{
GtkTextBuffer *txtbuf;
txtbuf =gtk_text_view_get_buffer( GTK_TEXT_VIEW(TextView));
gtk_text_buffer_set_text (txtbuf,text,-1);
gtk_text_view_set_buffer(GTK_TEXT_VIEW (TextView),txtbuf);
gtk_widget_show (TextView);
}

void AfficheNumeroLigne(GtkWidget *TextView, gint NbreDeLigne)
{
int i,j;
char temp[4];
char text[NbreDeLigne*5+1];
for(i=0;i<NbreDeLigne;i++)
{
// temp=itoa (i, NULL, 10);
for(j=0;j<4;j++)
{
text[5*i+j]=temp[j];
text[5*i+4]='\n';
}
}
text[0]="1";

text[NbreDeLigne*5+1]= '\O';
printf(" text = %s",text);
EcrireDansTextView(TextView,&text[0]);
}



erreur : Deja je peut ecrire se que je veut avec ma premiere fonction avec la deuxieme quand je met le '\0' terminale j'ai le warning

callbacks.c:39:25: attention : séquence d'échappement « \O » inconnue

et rien ne s'affiche dans mon widget.

je ne comprend plus rien la.

sinon comment ca se fait que mes printf ne marche pas??? ces du a l'interface graĥique qui tourne je trouve ca bizar etant donner que c'est 2 entités differentes.
0
Un détail:
- ce n'est pas '\O' (O majuscule) mais '\0' (zéro).
0
mazareth Messages postés 271 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 5 mars 2019 28
28 mai 2009 à 18:45
oui je sais mais il ne le reconnaissait pas.

le probleme venais de sprintf (temp, "%d",i); qui me mettais un '\0' lui aussi.
void AfficheNumeroLigne(GtkWidget *TextView, gint NbreDeLigne)
{
int i,j,cmpt;
char temp[4];
char text[NbreDeLigne*5+1];

for(i=1;i<=NbreDeLigne;i++)
{
sprintf (temp, "%d",i);
if(i<10) j = 1;
if(i>=10) j = 2;
if(i>=100) j = 3;
if(i>=1000) j = 4;

for(cmpt=0;cmpt<j;cmpt++)
{
text[5*(i-1)+cmpt]=temp[cmpt];
}
for(cmpt=j;cmpt<4;cmpt++)
{
text[5*(i-1)+cmpt]=' ';
}
text[5*(i-1)+4]='\n';
}
text[5*NbreDeLigne]='\0';
EcrireDansTextView(TextView,text);
}


ca marche maintenant je me heurte a un probleme enorme.

si quelqu'un peut m'aider!!

http://www.commentcamarche.net/forum/affich 12640196 makefile?#dernier
0