Gtk textbuffer

Résolu
mazareth Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   -  
mazareth Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   -
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??
A voir également:
  • Gtk textbuffer
  • Unison gtk - Télécharger - Gestion de fichiers
  • GTK Selfimage - Télécharger - Divers Utilitaires

6 réponses

mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
http://lists.ximian.com/pipermail/glade-users/2005-May/002493.html
http://forum.gtk-fr.org/viewtopic.php?id=4077

Bonne chance
1
loupius
 
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   Statut Membre Dernière intervention   28
 
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 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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   Statut Membre Dernière intervention   28
 
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
loupius
 
Un détail:
- ce n'est pas '\O' (O majuscule) mais '\0' (zéro).
0
mazareth Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   28
 
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