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 :

Recupérer le contenu d'un GtkEntry vers un TextView


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut Recupérer le contenu d'un GtkEntry vers un TextView
    Bonjour je souhaiterai recuperer le texte saisi dans un GtkEntry pour l'afficher dans un TextView. Jusque là tout ce que j'ai essayer me fait planter mon appli dès que je lance l'envoi de la saisi vers le TextView.

    Voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     sNom = gtk_entry_get_text(GTK_ENTRY(pEntry));
         /*Création du buffer*/
                   pTextBuffer = gtk_text_buffer_new(NULL);
                   gtk_text_buffer_set_text(pTextBuffer, sNom,-1);
                   gtk_text_view_set_buffer(pTextView, pTextBuffer);
    si quelqu'un peut m'aider.Merci d'avances

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut et bienvenue sur les forums de developpez.com


    Le mieux serait de récupérer le buffer (au lieu d'en créer un nouveau) créé automatiquement lors de la création d'un GtkTextView, ce que tu peux faire avec la fonction gtk_text_view_get_buffer, tu remplis normalement le buffer comme tu l'as fait mais inutile dans ce cas d'affecter le buffer au widget

    Normalement cela devrait fonctionner !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Je viens de faire ce que tu m'as dis. Mais toujours pareil GTK.exe plante lors de l'appuie du bouton pour valider. Serait-ce parce que le formulaire se trouve sur un boite de dialogue?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Moi mon code de test fonctionne très bien:
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
     
    GtkWidget * p_entry = NULL;
    GtkWidget * p_text  = NULL;
    GtkWidget * p_btn   = NULL;
     
     
    static void cb (GtkWidget * p_wid, gpointer p_data)
    {
       GtkTextBuffer * p_buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (p_text));
       const gchar    * str   = gtk_entry_get_text (GTK_ENTRY (p_entry));
     
       gtk_text_buffer_set_text (p_buf, str, -1);
     
       (void) p_wid;
       (void) p_data;
    }
     
     
    int main (int argc, char ** argv)
    {
       GtkWidget * p_win    = NULL;
       GtkWidget * p_vbox   = NULL;
     
     
       gtk_init (& argc, & argv);
     
     
       p_win = gtk_window_new           (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_default_size      (GTK_WINDOW (p_win), 640, 480);
       gtk_container_set_border_width   (GTK_CONTAINER (p_win), 5);
       gtk_window_set_position          (GTK_WINDOW (p_win), GTK_WIN_POS_CENTER);
       g_signal_connect                 (p_win, "destroy", gtk_main_quit, NULL);
     
     
       p_vbox = gtk_vbox_new   (FALSE, 5);
       gtk_container_add       (GTK_CONTAINER (p_win), p_vbox);
     
     
       p_entry = gtk_entry_new ();
       p_text  = gtk_text_view_new ();
       p_btn   = gtk_button_new_with_label ("Envoyer...");
     
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry, TRUE, TRUE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_text, TRUE, TRUE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_btn, TRUE, TRUE, 0);
     
       g_signal_connect (G_OBJECT (p_btn), "clicked", G_CALLBACK (cb), NULL);
     
     
       gtk_widget_show_all (p_win);
       gtk_main ();
     
     
       return EXIT_SUCCESS;
    }
    Sinon montre ton code complet.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    je viens de tester ce que tu m'as filer. toujours pareil plantage de mon appli.
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    void OnUser(GtkWidget *widget,gpointer data,GtkWidget *pTextView)
    {
        GtkWidget* pBoite;
        GtkTextBuffer *pTextBuffer;
        GtkWidget* pEntry;
        GtkTextIter iStart, iEnd;
        gchar *sBuffer;
        gchar *sNom;
     
     
     
        /* Creation de la boite de dialogue */
        /* 1 bouton Valider */
        /* 1 bouton Annuler */
        pBoite = gtk_dialog_new_with_buttons("Saisie du nom",
            GTK_WINDOW(data),
            GTK_DIALOG_MODAL,
            GTK_STOCK_OK,GTK_RESPONSE_OK,
            GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,
            NULL);
     
        /* Creation de la zone de saisie */
        pEntry = gtk_entry_new();
        gtk_entry_set_text(GTK_ENTRY(pEntry), "Saisissez votre nom");
        /* Insertion de la zone de saisie dans la boite de dialogue */
        /* Rappel : paramètre 1 de gtk_box_pack_start de type GtkBox */
        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(pBoite)->vbox), pEntry, TRUE, FALSE, 0);
     
        /* Affichage des elements de la boite de dialogue */
        gtk_widget_show_all(GTK_DIALOG(pBoite)->vbox);
     
        /* On lance la boite de dialogue et on recupere la reponse */
        switch (gtk_dialog_run(GTK_DIALOG(pBoite)))
        {
            /* L utilisateur valide */
            case GTK_RESPONSE_OK:
                   sNom = gtk_entry_get_text(GTK_ENTRY(pEntry));
         /*Création du buffer*/
                   pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pTextView));
                   gtk_text_buffer_set_text(pTextBuffer, sNom,-1);
     
                break;
            /* L utilisateur annule */
            case GTK_RESPONSE_CANCEL:
            case GTK_RESPONSE_NONE:
            default:
     
     
     
     
     
     
                break;
        }
     
        /* Destruction de la boite de dialogue */
        gtk_widget_destroy(pBoite);
    }

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Ta fonction OnUser, c'est un callback (de quel widget si oui) ?

    Si c'est un callback du bouton que tu utilises pour valider la saisie .. c'est pas bon du tout ! Il faut que tu respect les signatures des signaux mis en place par GTK+ soit pour un bouton avec le signal "clicked" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void        user_function                  (GtkButton *button,
                                                gpointer   user_data)
    Tout comme le nom de la fonction, les noms des arguments peuvent êtres personnalisés mais il faut "toujours" respecter le type et le nombre des arguments !

    Ici tu utilises un troisième argument qui est pointeur sur un GtkTreeView or, celui-ci n'est jamais initialisé ! L'argument data de type gpointer dans les callback sert justement à ca, il faut donc que tu passes le pointeur de ton GtkTreeView à cet argument ce qui se fait durant l'enregsitrement du callback avec la fonction "g_signal_connect", c'est le dernier argument !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

Discussions similaires

  1. Recupérer le contenu d'une comboBox
    Par M1000 dans le forum Flash
    Réponses: 1
    Dernier message: 17/05/2006, 10h41
  2. Réponses: 12
    Dernier message: 22/02/2006, 15h28
  3. [STRING]Contenu d'un String <> vers &lt; et &g
    Par TreizeSegments dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 03/08/2004, 08h37
  4. Copie du contenu d'un répertoire vers un autre
    Par IG88 dans le forum Windows
    Réponses: 4
    Dernier message: 30/07/2004, 14h33
  5. [MYSQL] Copier contenue d'une table vers...
    Par naseeb18 dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/04/2004, 13h40

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