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 :

Glade et Gtk+


Sujet :

GTK+ avec C & C++

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    j'essai de faire un passage d'un fenetre a une autre en cliquant sur valider sur la premiere page, ca ne fonctionne toujours pas même avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_widget_show_all(window2)
    il me dit que "window2" n'est pas déclaré,
    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtk_widget_show_all("window2")
    mais rien du tout
    je ne sais pas quoi faire ( on est en binome et il n'y a que moi qui me prend la tete ca ne m'aide pas non plus )

  2. #22
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 17
    Par défaut
    il faut bien entendu que ton composant se nomme window2.
    si ce composant existe et que tu pars d'une fonction il faut penser à le passer en paramètre (j'ai du mal à imaginer des variables globales pour gérer tout ça... rien que d'y penser ça me rend malade).
    je ne sais pas comment glade génère son code en C mais regardes bien si l'endroit à partir duquel tu veux ouvrir ta fenetre "voit" bien ce composant.

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    Je vois maintenant ou est le probleme il faut passer window en parametre mais comment faire étant donné que lorsque je fais "clicked" dans le signal du bouton, les seuls parametres qu'ils me donnent sont "GtkButton *button et gpointer user_data.

    Maintenant je comprends le probleme, la question maintenant c'est comment le résoudre

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    En cherchant dans tous les fichiers C, j'ai trouvé un fichier main.c donc la fonction principale : dedans je vois la création de la "window1" mais pas de la "window2" est ce normal?

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 17
    Par défaut
    le principal problème des fonctions callback de gtk c'est leur structure qui est rigide.
    ce qu'il faut savoir c'est que gpointer peut être équivalent au type void* qui peut virtuellement représenter n'importe quel type de pointeur.
    exemple avec ta fenêtre:
    le dernier paramètre de ta connexion de signal ne doit pas etre nul.

    quand tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g_signal_connect (moncomposant, G_CALLBACK (mafonction),NULL);
    pour passer ta fenetre en paramètre tu devrais plutôt faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g_signal_connect (moncomposant, G_CALLBACK (mafonction),(gpointer)Mafenetre);
    pour la récupérer dans ta fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    static void mafonction(GtkWidget * comp1,gpointer comp2)
    {
    GtkWidget * mafenetre;
    mafenetre=(GtkWidget *)comp2; //cast
    }
    et voila comment passer ta fenêtre en paramètre.

    Le problème suivant qui peut être soulevé c'est comment passer plusieurs paramètres. Pour cela on peut par exemple regrouper tous les paramètres que l'on veut passer dans une structure.

    EDIT: Pour ton problème de fenêtre il nous faudrait l'arborescence de tes composants crées sous glade.

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    Bon alors insultez moi de ce que vous voulez!
    Je viens de me rendre compte que j'oubliais de générer le code.


    Bon, après cette erreur monumentale : reprenons si vous etes toujours d'accord : j'ai bien mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gtk_widget_show_all("window2");
    mais il me met
    alors maintenant que tout fonctionne, pouvez-vous m'aider quand même?

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    Voici l'arborescence
    Images attachées Images attachées  

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 17
    Par défaut
    je ne crois pas qu'il ai besoin des quotes dans ton appel (""). si wondow2 est bien un gtkWidget * pas besoin des quotes

    Edit: je te conseilles de donner des noms a tes composants. car au bout d'un moment tu risques de t'y perdre à savoir qui est quoi

  9. #29
    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 Mylee Voir le message
    je ne sais pas comment glade génère son code en C mais regardes bien si l'endroit à partir duquel tu veux ouvrir ta fenetre "voit" bien ce composant.
    Mais bon sang, pourquoi insister ? Même avec Glade 2, il est déconseillé de générer du code C. Cette option a été retiré par la suite, tout simplement parce qu'elle produit du code peu lisible et maintenable. Donc le but est de générer des fichiers XML avec Glade 2 ou Glade 3. S'il y a une contrainte d'utilisation de Glade 2, alors il faudra utiliser libglade, une bibliothèque externe, pour utiliser le fichier XML. Et s'il est possible d'utiliser Glade 3, alors autant générer un fichier XML au format GtkBuilder, qui est fourni de base par GTK+ dans ses versions récentes (plus besoin d'utiliser une bibliothèque externe comme libglade).

  10. #30
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    Mais je dois utiliser obligatoirement glade2 j'ai pas le choix et on nous a appris qu'il fallait tout faire et générer le code en C ensuite.

  11. #31
    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
    gtk_widget_show_all prend comme argument un pointeur vers un GtkWidget. Or elle lui passe une chaîne de caractère contenant le nom du widget... Ça ne peut pas fonctionner, les types ne sont pas compatibles... C'est comme additionner des bananes et des carottes. Il faut récupérer un pointeur vers le widget en question avant de pouvoir le manipuler. Que ce soit avec libglade ou GtkBuilder, cela se fait en deux phases :
    1. Récupérer un pointeur vers le widget, en utilisant son nom tel que déclaré dans glade (utilisation de libglade ou GtkBuilder)
    2. Manipuler le widget récupéré

    Par exemple avec GtkBuilder, on va écrire (je simplifie un peu, il faudrait rajouter la gestion d'erreur) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GtkBuilder *builder = gtk_builder_new ();
    gtk_builder_add_from_file (builder, "interface.xml", NULL);
    GtkWidget *window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
    gtk_window_show_all (window);

  12. #32
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    peux tu me dire comment on faire pour changer le nom de la variable? car pour les boutons on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GtkWidget * nom = lookup_widget(GTK_WIDGET(button),"label1");
    mais pour les fenetres??? car je crois que c'est ce qu'il me manque.

  13. #33
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 17
    Par défaut
    Pour changer le nom de la variable il faut (au choix):

    -1: editer le code généré par glade et modificer le nom des variables déclarées
    -2: changer le nom des variables directement dans glade

    enfin ce n'est qu'un conseil pour ne pas etre perdu.
    Attention j'ai parlé du NOM des variables et pas des étiquettes qu'on leur met.

    sinon le gtk_widget_show_all(window2); devrait marcher

  14. #34
    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 bebediddl Voir le message
    peux tu me dire comment on faire pour changer le nom de la variable? car pour les boutons on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GtkWidget * nom = lookup_widget(GTK_WIDGET(button),"label1");
    mais pour les fenetres??? car je crois que c'est ce qu'il me manque.
    Une fenêtre est aussi un widget... GtkWindow dérive de GtkWidget. Il n'y a pas de différence pour récupérer un pointeur vers l'objet.

  15. #35
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    callbacks.c: In function ‘on_button1_clicked’:
    callbacks.c:23: warning: incompatible implicit declaration of built-in function ‘strcat’
    lorsque je compile il me met ca

  16. #36
    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
    Au passage, si la génération de code via Glade est un impératif du projet, tu enverras ta prof ici qu'on la lapide. Ça doit bien faire 4 ans qu'on déconseille cette pratique, et ce n'est pas rendre service aux étudiants que de l'enseigner.

  17. #37
    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 bebediddl Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    callbacks.c: In function ‘on_button1_clicked’:
    callbacks.c:23: warning: incompatible implicit declaration of built-in function ‘strcat’
    lorsque je compile il me met ca
    Il te dit que tu déclares implicitement la fonction strcat... Cela veut dire que tu l'utilises, mais qu'elle n'a été déclarée nulle part. Il faut que tu inclues string.h pour pouvoir l'utiliser.

  18. #38
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    Je dois partir je reviens vite!

  19. #39
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    je suis revenue

  20. #40
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 47
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Au passage, si la génération de code via Glade est un impératif du projet, tu enverras ta prof ici qu'on la lapide. Ça doit bien faire 4 ans qu'on déconseille cette pratique, et ce n'est pas rendre service aux étudiants que de l'enseigner.
    Tout a fait d'accord avec toi, surtout quand tu demandes a la prof " on fait comment pour mettre l'image ca ne fonctionne pas " elle vous répond " bah je sais pas encore faut que je regarde"!!!!.
    Imaginez vous la prof ... c'est pour cela j'ai vraiment besoin de votre aide!!!! Je suis perdue :'( je m'en sors pas j'arrive vraiment pas a passer d'une fenetre a une autre :'(!!!!!!

Discussions similaires

  1. installation Glade et GTK+
    Par autre dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 17/12/2011, 12h03
  2. langage C et glade et GTK
    Par mallsoul dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 09/04/2010, 03h26
  3. interface glade : erreur gtk-builder-convert
    Par alexglvr dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 14/09/2009, 16h46
  4. installer python2.6 et glade et gtk
    Par mike5923 dans le forum Déploiement/Installation
    Réponses: 0
    Dernier message: 07/09/2009, 16h32
  5. Réponses: 17
    Dernier message: 10/10/2006, 19h57

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