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 :

Une super GtkCalculatrice


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut Une super GtkCalculatrice
    Bonjour à tous, désolé, c'est encore moi...
    Bon ben finalement, j'ai décidé de continuer un peu avec gtk...
    La pour m'exercer, je suis en train de faire une calculatrice...
    Seulement j'ai un probleme
    Quand j'appui sur le bouton "+", il devrait m'afficher le message de test "Ok c bon", seulement, ça ne marche pas, et je ne comprends pas pourquoi

    Voici une partie du main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        /* Connexion au signal "clicked" des boutons d'opération */
        for (i = 12; i <= 17; i++)
        g_signal_connect(G_OBJECT(calculatrice->pButton[i]),"clicked",G_CALLBACK(operation),calculatrice->pSaisie);
     
        gtk_widget_show_all(calculatrice->pWindow);
    Voici ma fonction callback:
    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
     
    void operation(GtkWidget *widget, gpointer data)
    {
        //gchar sSaisie[MAX_LENGTH + 1] = "";
        /* On récupere le label du bouton */
        const gchar *label = gtk_button_get_label(GTK_BUTTON(widget));
     
        switch (label[0])
        {
            case '+':
                addition(data);
                break;
            case '-':
                soustraction(data);
                break;
            case '*':
                multiplication(data);
                break;
            case '/':
                division(data);
                break;
            case '%':
                modulo(data);
                break;
            case '=':
                resultat(data);
                break;
        }
    }
    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
     
    void addition(gpointer data)
    {
        /* Variables */
        MainWindow *calculatrice;
        const gchar* sSaisie;
     
        /* Récuperation de data */
        calculatrice = (MainWindow*) data;
     
        /* Récupération du nombre contenu dans le GtkEntry */
        sSaisie = gtk_entry_get_text(GTK_ENTRY(calculatrice->pSaisie));
     
        /* Modification du texte contenu dans le GtkEntry */
        gtk_entry_set_text(GTK_ENTRY(calculatrice->pSaisie), "Ok, c bon");
     
     
    }
    et la c'est ma structure _MainWindow
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct _MainWindow
    {
        GtkWidget *pWindow;
        GtkWidget *pTable;
        GtkWidget *pButton[20];
        GtkWidget *pSaisie;
        GtkWidget *pLabel;
    };
    typedef struct _MainWindow MainWindow;
    Donc ben si vous avez une solution, ça serait sympa..
    Merci

  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
    Tiens, ça faisait longtemps que je n'avais pas eu à poser cette question Que signifie "ça ne marche pas" ? Juste que ça n'affiche pas le message que tu attends? Ca affiche des warnings à la place ? le programme plante ?

  3. #3
    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
    Déjà, disséminer des g_debug (G_STRFUNC) au début des fonctions, et des g_debug (G_STRLOC) autour des lignes qui t'intéressent... Ça te permettra de diagnostiquer ce qui est exécuté et ce qui ne l'est pas.

    Ensuite ta fonction operation est trop compliquée. Tu devrais juste récupérer le texte du bouton et le rajouter à la fin de ta zone de saisie, sauf dans le cas du bouton =. Les fonctions addition, soustraction, etc. ne servent à rien. Le code d'addition devrait être dans operation.

    Regarde le comportement de gcalctool sous GNOME.

  4. #4
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    J'ai trouvé le probleme, c'est ma fonction addition, le parametre data, je lui envoi un GtkEntry..

    Mais en fait ça résout pas mon problème, car je peu faire une addition, mais la soustraction ça marche pas...

    Le code d'addition devrait être dans operation.
    Oui, effectivement, c'est ce que j'ai fait au final, mais la soustraction ne fonctionne pas..

    Effectivement, j'ai regardé gcalctool, mais il utilise de l'analyse syntaxique.
    Dans ce cas, il faudrait que je trouve un tuto sur bison.

    ça s'annonce beaucoup plus compliqué que ce que je pensais....

  5. #5
    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
    Tu nous dis encore que ça ne marche pas, mais sans nous donner de code. Idem la fois d'avant tu découpes tellement les morceaux à donner qu'on avait pas la partie qui déconnait (le type de ta variable)...

  6. #6
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    tu nous dis encore que ça ne marche pas, mais sans nous donner de code.
    Ah, oui, en fait, la compilation se passait sans problème, mais quand je cliquais sur "+" rien ne s'affichait...

    De plus, mon code est sur 6 fichiers, je ne peut donc pas les poster tous sur le forum..
    Tu peux faire l'analyse toi même, c'est un cas simple...
    Ben, oui mais c'est pas du C

  7. #7
    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
    Dans ce cas y a pas 50 solutions... soit tu mets en ligne ton code dans une archive en ligne, soit tu crées une version minimal recréant le problème (préférable). Mais je pense que tu as déjà du mal à diagnostiquer ton code, et que tu y vas un peu à l'aveuglette. Mets des traces si tu veux savoir ce qui se passe, il n'y a que comme ça que tu pourras localiser le problème (ou avec un débogueur).

    Exemple: si rien ne s'affiche quand tu appuies sur '+', c'est que
    1. Ta callback n'est pas appelée (signal connecté au mauvais widget ?, mauvais signal ? )
    2. Le texte n'est pas modifié (texte modifié identique au texte d'origine ?)

    Il suffit de mettre des traces au bon endroit pour trouver l'origine, en vérifiant les hypothèses possibles. Mais nous on a pas de boule de cristal, on ne peut pas deviner à ta place sans code...

    Quant à l'analyse, un arbre, c'est un arbre, quel que soit le langage. C'est l'algorithme qui est dur à trouver en général. Là ce sont des arbres binaires qui sont utilisés pour l'analyse syntaxique, tout ce dont tu as besoin se trouve donc dans la classe GTree de la GLib... Les priorités d'opérateurs tu les connais aussi. Reste à comprendre et retranscrire l'algo, et google et la wikipédia peuvent t'aider.

  8. #8
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    J'ai trouvé ça en cherchant sur le net, mais j'aime pas le tout cuit..
    Même si je n'arriverais certainement pas à faire mieux, j'aimerais bien comprendre comment fonctionne un parser tout simple.

    Quant à l'analyse, un arbre, c'est un arbre, quel que soit le langage. C'est l'algorithme qui est dur à trouver en général. Là ce sont des arbres binaires qui sont utilisés pour l'analyse syntaxique, tout ce dont tu as besoin se trouve donc dans la classe GTree de la GLib... Les priorités d'opérateurs tu les connais aussi. Reste à comprendre et retranscrire l'algo, et google et la wikipédia peuvent t'aider.
    Ben le lien que tu m'as donné, ils utilisent des termes, que je ne connais pas du tout, "OCaml", je ne connais pas du tout, je sais juste que c'est un langage...

  9. #9
    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
    Citation Envoyé par artificier59 Voir le message
    J'ai trouvé ça en cherchant sur le net, mais j'aime pas le tout cuit..
    Même si je n'arriverais certainement pas à faire mieux, j'aimerais bien comprendre comment fonctionne un parser tout simple.
    Et c'est très bien. C'est comme ça qu'on avance.



    Citation Envoyé par artificier59 Voir le message
    Ben le lien que tu m'as donné, ils utilisent des termes, que je ne connais pas du tout, "OCaml", je ne connais pas du tout, je sais juste que c'est un langage...
    Je te rassure, je ne connais pas OCaml non plus ! Ce qui est important, c'est la structure en arbre binaire, et comment tu décomposerais une chaine de caractères pour en extraire les parties importantes, dans l'ordre, en utilisant les priorités des opérateurs arithmétiques. Peut être que ceci pourra t'aider un peu plus, surtout l'exemple détaillé.
    http://en.wikipedia.org/wiki/Shunting_yard_algorithm

Discussions similaires

  1. Protéger une super idée d'application
    Par ramoucho75020 dans le forum Emploi
    Réponses: 28
    Dernier message: 25/11/2019, 11h38
  2. Réponses: 23
    Dernier message: 25/05/2010, 16h44
  3. Accessibilité Aux Attributs d'une Super Classe
    Par Goupo dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2007, 17h20
  4. [débutant] appel de la fonction d'une super-classe
    Par Higestromm dans le forum C++
    Réponses: 7
    Dernier message: 10/10/2005, 13h38
  5. Referencer une super classe
    Par MrBlonde666 dans le forum Général Python
    Réponses: 2
    Dernier message: 02/07/2005, 17h52

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