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 détruire un widget créé dans une autre fonction?


Sujet :

GTK+ avec C & C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Points : 19
    Points
    19
    Par défaut Comment détruire un widget créé dans une autre fonction?
    Bonjour à tous!

    J'ai encore un petit problème! Comment détruire un widget créé dans une autre fonction? Dans la faq il y a bien cette page: http://gtk.developpez.com/faq/?page=...AUX_parametres, mais je ne comprends pas trop.

    Dans mon cas, si je lis bien la faq, je devrais utiliser gtk_widget_get_name(), or cela ne renvoie que le nom du widget, et moi je voudrais avoir accès au widget pour pouvoir le détruire.

    Voici mes fonctions:

    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
     
    void GoToStep1(GtkBuilder *pBuildMainWindow, gpointer Data)
    {
    	GtkWidget *pStepHorizontalBox;
    	pStepHorizontalBox = GTK_WIDGET(gtk_builder_get_object(pBuildMainWindow, "hbox2"));
     
    	GError *GtkBuildError = NULL;
    	GtkBuilder *pBuildStep;
    	pBuildStep = gtk_builder_new();
     
    	if(pBuildStep)
    	{
    		if(!gtk_builder_add_from_file(pBuildStep, "ui/Step1.xml", &GtkBuildError))
    		{
    			if(GtkBuildError)
        		{
          			printf("Error: %s", GtkBuildError -> message);
    			}
      		}
    	}
     
    	/* Declare widgets from GtkBuilder to handle signals */
    	GtkWidget *pMainProgressBar;
    	pMainProgressBar = GTK_WIDGET(gtk_builder_get_object(pBuildMainWindow, "progressbar1"));
     
    	GtkWidget *pMainNextButton;
    	pMainNextButton = GTK_WIDGET(gtk_builder_get_object(pBuildMainWindow, "button2"));
    	g_signal_connect_swapped(GTK_BUTTON(pMainNextButton), "clicked", G_CALLBACK(Progress10), pMainProgressBar);
     
    	GtkWidget *pAboutButton;
    	pAboutButton = GTK_WIDGET(gtk_builder_get_object(pBuildMainWindow, "button3"));
    	g_signal_connect(GTK_BUTTON(pAboutButton), "clicked", G_CALLBACK(AboutProgram), NULL);
     
    	GtkWidget *pSaveAsButton;
    	pSaveAsButton = GTK_WIDGET(gtk_builder_get_object(pBuildMainWindow, "button1"));
    	gtk_widget_set_sensitive(GTK_WIDGET(pSaveAsButton), FALSE);
     
    	/* Show step 1 */
    	GtkWidget *pStepFrame;
    	pStepFrame = GTK_WIDGET(gtk_builder_get_object(pBuildStep, "frame1"));
    	gtk_box_pack_start_defaults(GTK_BOX(pStepHorizontalBox), pStepFrame);
     
    	g_signal_connect_swapped(GTK_BUTTON(pMainNextButton), "clicked", G_CALLBACK(GoToStep2Destroy), pBuildMainWindow);
    }
     
    void GoToStep2Destroy(GtkBuilder *pBuildMainWindow, gpointer Data)
    {
     
    /* Ici j'ai bien récupéré le GtkWidget pBuildMainWindow, mais comment je détruis un widget enfant? \
     * Sachant que je ne passe qu'un argument, c.a.d. le fenêtre principale du programme. Comment???? */
     
    }
    Dans le main.c j'appelle la fonction: GoToStep1(pBuildMainWindow, NULL);
    La première fonction fonctionne, mais après je dois détruire "pStepFrame".

    Qui peut m'aider?
    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Points : 248
    Points
    248
    Par défaut
    hmm, tu pourrais passer le pointeur que tu veux détruire en paramètre de step2. Pour cela, tu pourrais binder un paramètre supplémentaire lors de la connection au signal swapped(fonction de la lib sigc, avec bind)
    Je sais que ça marche avec gtkmm, du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    signal.connect(sigc::bind<Gtk::Widget*>(sigc::mem_fun(...callback...), monWidget))
    je pense que ça doit être possible avec gtk+ ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/12/2014, 15h11
  2. Déclarer une fonction dans une autre fonction
    Par Baruch dans le forum Caml
    Réponses: 33
    Dernier message: 27/02/2009, 22h29
  3. Réponses: 2
    Dernier message: 31/12/2007, 13h50
  4. [MySQL] Comment déclencher un 2me formulaire dans une autre page
    Par jlbrenas dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 27/01/2007, 17h43
  5. Réponses: 5
    Dernier message: 29/06/2006, 17h23

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