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 :

Comment faire un assistant?


Sujet :

GTK+ avec C & C++

  1. #41
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    J'ai un peu relu et bien lu les fonctions sur http://library.gnome.org/ et selon moi cela devrait être comme ça:

    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
     
    	/* Create horizontal box to be able to insert the GtkBuilder */
    	GtkWidget *pMainHorizontalBox;
    	pMainHorizontalBox = gtk_hbox_new(FALSE, 0);
    	gtk_container_add(GTK_CONTAINER(pMainWindow), pMainHorizontalBox);	
     
    	/* Elements */
    	GError* GtkBuildError = NULL;
    	GtkBuilder* pBuildMainWindow;
    	pBuildMainWindow = gtk_builder_new();
     
    	if(pBuildMainWindow)
    	{
    		if(!gtk_builder_add_from_file(pBuildMainWindow, "MainWindowUI.xml", &GtkBuildError))
    		{
    			if(GtkBuildError)
        		{
          			printf("Error: %s", GtkBuildError -> message);
    			}
      		}
     
    	GObject *pMainVerticalBox;
    	pMainVerticalBox = gtk_builder_get_object(pBuildMainWindow, "vbox1");
    	gtk_box_pack_start_defaults(GTK_BOX(pMainHorizontalBox), GTK_WIDGET(pMainVerticalBox));
    	}
     
    	/* Show main window */
    	gtk_widget_show_all(pMainWindow);
    Tout compile sans aucune erreur ou avertissement. J'ai un peu refait le code, et là j'essaie d'insérer la box verticale dans une box horizontale, mais j'ai cette erreur dans un terminal en lancant le prog:
    Gtk-CRITICAL **: gtk_box_pack_start: assertion `GTK_IS_WIDGET (child) ` failed

  2. #42
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Par défaut
    et en le récupérant dans un GtkWidget ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GtkWidget *pMainVerticalBox = NULL;
    pMainVerticalBox = GTK_WIDGET(gtk_builder_get_object(pBuildMainWindow, "vbox1"));
    gtk_box_pack_start_defaults(GTK_BOX(pMainHorizontalBox), pMainVerticalBox);

    C'est à faire confirmer, mais je pense que le fait de le récupérer en GObject te fait perdre des propriétés propres à un GtkWidget qu'il ne peut pas inventer au moment ou tu cherches à l'utiliser en tant que GtkWidget.
    C'est pour cela qu'il ne le reconnait pas!

  3. #43
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    J'avais pas pensé à faire omme ça, tout est ok pendant la compilation aussi, mais voici l'erreur quand j'exécute le programme:
    (main:18441): Gtk-CRITICAL **: gtk_box_pack_start: assertion `GTK_IS_WIDGET (child)' failed

  4. #44
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    Veuillez m'excuser, le fichier à lire était dans un sous dossier et j'avais oublié de changer le chemin. Donc ça marrche, bizarrement le message disant que le fichier n'a pas été trouvé s'est seulemtn affiché après avoir utilisé ce signal:
    g_signal_connect(G_OBJECT(pMainWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);

    Merci, et désolé our le dérangement!

  5. #45
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Par défaut
    Teste ce code, et donne nous la sortie
    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
     
    /* déclaration de ta fenêtre GtkWindow, de ta Horizontal Bar */
     
    GError* error = NULL;
    GtkBuilder* builder = gtk_builder_new();
    GtkWidget* vbox = NULL;
     
    if(builder) {
      if(!gtk_builder_add_from_file(builder, "MainWindowUI.xml", &error)) {
         printf("Chargement fichier xml echoué\n");
         if(error) {
            printf("Erreur : [%s]\n", error->message);
         }
      } else {
         vbox = GTK_WIDGET(gtk_builder_get_object(builder, "vbox1"));
         if(!vbox) {
            printf("vbox est NULLE!\n");
         } else {
            gtk_box_pack_start_defaults(GTK_BOX(<ta_hbox>), vbox);
            printf("ajout vbox OK\n");
         }
      }
    }
     
    /* ... */

    edit : lol owned!
    Bonne continuation

  6. #46
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    Merci, je commence à m'en sortir! Je dois penser à relire un code complètement!

    Sinon encore une petite question, j'ai ajouté un signal dans mo fichier xml:
    <signal name="clicked" handler="gtk_main_quit"/>

    Celui-ci marche après avoir fait la commande:
    gtk_builder_connect_signals(pBuildMainWindow, NULL);

    Mais comment y mettre sa propre fonction? Disons que j'ai une fonction pour afficher une fenêtre About Program et je voudrais ajouter un signal avec un bouton dans mon xml...

  7. #47
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    Trouvé tout seul comme un grand!
    Sujet fini, merci beaucoup!

  8. #48
    Invité de passage
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2008
    Messages : 1
    Par défaut
    Pour ceux qui galèrent encore pour savoir comment faire ce que elwario91 voulait faire, il suffit de déclarer la function en tant que extern.

    Egalement, il ne faut pas oublier de lier avec gmodule. C'est à dire, par exemple:

    LFLAGS := -g3 -Wall `pkg-config --libs gtk+-2.0 gmodule-2.0`

    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Comment faire les fenêtres d'assistant (wizard)
    Par bruce-willis dans le forum MFC
    Réponses: 1
    Dernier message: 09/02/2010, 09h46
  2. Comment faire un assistant précédent/suivant sur le web ?
    Par Bobsinglar dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 26/08/2009, 14h15
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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