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 :

Recuperer une entrée.


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Par défaut Recuperer une entrée.
    Bonjour,

    Voilà j ai récupéré ce bout de code dans un tutoriel:

    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
    void OnUpdate(GtkWidget *entry, gpointer data)
    {
        const gchar *sText;
     
        MainWindow *pApp;
     
        /* Recuperation de data */
        pApp = (MainWindow*) data;
     
        /* Recuperation du texte contenu dans le GtkEntry */
        sText = gtk_entry_get_text(GTK_ENTRY(pApp->entry));
     
        /* Modification du texte contenu dans le GtkLabel */
        gtk_label_set_text(GTK_LABEL(pApp->pLabelAffichage1[0]), sText);
     
    }

    J aurais souhaité faire subir quelques modifications à la valeur du Gtk Entry récupéré dans cette fonction.
    Admettons que je souhaite divisé la valeur par 2 avant de l envoyer et l afficher dans le Gtk Label.

    Comment puis faire s il vous plaît.

    Mon but final serait : l utilisateur saisi une valeur dans un gtk_spin_button_new_with_range, il appuis sur un pButton (qui s appel "calcul"), ce qui déclencheras l affichage de plusieurs résultats dans plusieurs Gtk Label.

    Merci par avance de vos réponses.

    Shazad.

  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
    Ta question concerne donc spécifiquement comment convertir entre un entier et une chaîne ? Il y a des posts de forum à ce sujet, en gros tu peux utiliser strtol/g_strdup_printf

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Par défaut
    Bonjour teuf13,

    Merci pour ta réponse.
    Comme mon gtk spin button autorise la saisi de valeurs avec des nombres à virgules, il va falloir que je convertis le const gchar en double ou gdouble.

    J ai trouvé ceci pour l instant en m aidant de la documentation GTK:

    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
    void OnUpdate(GtkWidget *entry, gpointer data)
    {
        const gchar *sText;
        gdouble diapason;
     
        MainWindow *pApp;
     
        /* Recuperation de data */
        pApp = (MainWindow*) data;
     
        /* Recuperation du texte contenu dans le GtkEntry */
        sText = gtk_entry_get_text(GTK_ENTRY(pApp->entry));
     
        diapason = g_ascii_strtod(const gchar *sText, gchar **endptr);
     
        /* Modification du texte contenu dans le GtkLabel */
        gtk_label_set_text(GTK_LABEL(pApp->pLabelAffichage1[0]), sText);
     
    }
    Je ne comprend pas ce qu est le second paramètre (gchar **endptr) dans g_ascii_strtod.
    Le compilateur me montre une erreur:
    syntax error before "const".
    Je me trompe peut être dans l utilisation de cet fonction.


    Shazad

  4. #4
    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
    Je pense que tu devrais relire tes cours de C sur comment appeler une fonction, avant de chercher à bidouiller en GTK. On n'apprend pas à courir avant d'avoir appris à marcher...

    Sur un appel de fonction, tu passes juste le nom du paramètre, tu ne remets pas son type.
    Code incorrect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    diapason = g_ascii_strtod(const gchar *sText, gchar **endptr);
    Code correct : (si endptr a été déclaré)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    diapason = g_ascii_strtod(sText, endptr);
    La documentation de g_ascii_strtod t'indique explicitement que si ce n'est pas pour relire quelque chose qui est forcément en ascii, tu devrait utiliser la fonction strtod de la libc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gchar *end = NULL;
    diapason = strtod(sText, &end);
    Si tu ne souhaites pas gérer les erreurs pour l'instant (c'est mal !), mais tu peux écrire plus simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    diapason = strtod(sText, NULL);
    Pour le fonctionnement de strtod, il suffit de lire la page de manuel associée :
    http://www.linux-kheops.com/doc/man/.../strtod.3.html
    endptr te permet de faire une partie de la détection d'erreur. Il contient l'adresse du caractère qui suit le dernier caractère à avoir pu être traité.
    En gros si la chaine est "18toutous", endptr contiendra l'adresse du premier 't'.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Par défaut
    Bonjour libeforce,

    Il est vrai que j essais de créer une interface graphique sans réellement avoir toutes les cartes en main. Mon code est quand même bien avancé et il est vrai que je suis à un moment difficile.
    Je peux comprendre comment cela peux agacer les personnes du forum avec des messages comme le mien, mais je t avoue que je n ai jamais appris à programmer dans un cursus scolaire ou autre, et je t avoue aussi qu'il est difficile de bien progresser dans la programmation quand on a pas le vocabulaire nécessaire et que personne autour peux aider. Alors j essais de ne pas m empêcher de faire des choses et il est vrai que je compte beaucoup sur la communauté des personnes de ce forum.
    En tous les cas tous les conseils que l on me donne ne sont pas vain car cela me fait progresser à chaque fois.

    Je me permet de poser encore une question:

    Si je veux maintenant envoyer "diapason" à gtk_label_set_text , est-ce que je dois utiliser g_ascii_dtostr ?

    Encore merci par avance.

    Shazad

  6. #6
    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
    Nope, plutôt le g_strdup_printf que je t'ai indiqué précédemment (ça fonctionne comme printf). Par contre n'oublie pas de libérer la valeur qu'il retourne après utilisation si tu ne veux pas de fuite de mémoire.

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

Discussions similaires

  1. Recuperer une entrée par rapport a sa date
    Par bastian06n dans le forum Requêtes
    Réponses: 5
    Dernier message: 02/09/2010, 16h36
  2. Recuperer une entrée utilisateur
    Par batama dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 25/09/2008, 13h51
  3. [SAX] Recuperer une chaine XML entre balises avec SAX
    Par Ange-Louis dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 01/08/2008, 10h33
  4. [Stratégie] Récupérer une instance existante
    Par cmoulin dans le forum Général Java
    Réponses: 14
    Dernier message: 11/05/2004, 15h48
  5. comment recuperer une variable dans flash
    Par krépuscul dans le forum Flash
    Réponses: 30
    Dernier message: 16/10/2003, 09h40

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