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 :

Probleme fermeture fenetre


Sujet :

GTK+ avec C & C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Probleme fermeture fenetre
    Bonjour,
    j'ai un problème lorsque je souhaite fermer une fenêtre.

    J'ai une fenêtre principale à partir sur laquelle j'ai un bouton qui permet de lancer un thread et qui affiche en même temps une deuxième fenêtre. Sur cette fenêtre il y a un bouton qui permet d'arrêter le thread et de fermer cette deuxième fenêtre.
    J'ai pour cela utilisé la fonction gtk_widget_destroy() lorsqu'on clique sur le bouton...
    Le problème est que lorsque je clique sur mon bouton de fermeture, le bouton disparait mais la fenêtre reste la, vide.

    Est ce que quelqu'un pourrait-il m'aider svp ?!

    Merci !

  2. #2
    Membre expérimenté
    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
    Points : 1 633
    Points
    1 633
    Par défaut
    Si t'as plusieurs threads et que tu fais des appels à gtk+ depuis les différents threads sans prendre de précautions, c'est probablement la cause de ton pb.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Non le problème vient apparemment pas de mon thread.. J'ai supprimé tout ce qui était en rapport et j'ai toujours le meme probleme!
    Voici mon code si qqn peut me dire ou est ce que j'ai fait une erreur parce que je galère la...

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    void lancement_app(GtkWidget *pButton, gpointer data);
    int ferm_app(GtkWidget *pButton, gpointer data);
     
    int main(int argc, char **argv)
    {
        GtkWidget *pWindow;
        GtkWidget *pVBox;
        GtkWidget *pButton;
        gchar* titreUTF8; // Pour ranger le titre convertit
     
        gtk_init(&argc,&argv); // Initialisation de GTK
     
        pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); // Création de la fenètre
        titreUTF8 = g_locale_to_utf8("Création du fichier XML", -1, NULL, NULL, NULL); // Conversion du titre en utf8
     
        gtk_window_set_title(GTK_WINDOW(pWindow), titreUTF8); // Titre de la fenètre
        gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200); // Taille par défaut
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); // Connexion au signal de destruction
     
        pVBox = gtk_vbox_new(TRUE, 0); // Création de la box
        gtk_container_add(GTK_CONTAINER(pWindow), pVBox); // Ajout de la box à la fenètre principale
     
        pButton = gtk_button_new_with_label("Lancement de l'application"); // Création du bouton
        gtk_box_pack_start(GTK_BOX(pVBox), pButton, TRUE, FALSE, 0); // Ajout du bouton ds la box
     
        /* Connexion du signal "clicked" du GtkButton */
        /* La donnee supplementaire est la GtkVBox pVBox */
        g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(lancement_app), (GtkWidget*) pVBox);
        g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
        gtk_widget_show_all(pWindow); // Affichage de la fenètre
     
        gtk_main(); // Lancement de la boucle évènementielle
     
        return EXIT_SUCCESS;
    }
     
    void lancement_app(GtkWidget *pButton, gpointer data)
    {
        GtkWidget *fenetreBarre;
        GtkWidget *boutonQuit;
        gchar* titreFBarreUTF8;
     
        titreFBarreUTF8 = g_locale_to_utf8("Réception des coordonnées en cours...", -1, NULL, NULL, NULL); // Conversion du titre
     
        fenetreBarre = gtk_window_new(GTK_WINDOW_TOPLEVEL); // Création fenetre
        gtk_window_set_title(GTK_WINDOW(fenetreBarre),titreFBarreUTF8); // Titre de la fenetre
        gtk_window_set_default_size(GTK_WINDOW(fenetreBarre),150, 100); // Taille de la fenetre
       gtk_window_set_position(GTK_WINDOW(fenetreBarre),GTK_WIN_POS_CENTER); // Position de la fenetre
     
        boutonQuit = gtk_button_new_with_label("Arreter l'application"); // Création du bouton quitter
        gtk_container_add(GTK_CONTAINER(fenetreBarre), boutonQuit);
        g_signal_connect(G_OBJECT(boutonQuit), "clicked", G_CALLBACK(ferm_app), fenetreBarre);
     
        gtk_widget_show_all(fenetreBarre); // Affichage de la fenetre
    }
     
    int ferm_app(GtkWidget *fenetreBarre, gpointer data)
    {
       gtk_widget_destroy(fenetreBarre);
    }

  4. #4
    Membre expérimenté
    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
    Points : 1 633
    Points
    1 633
    Par défaut
    Tu t'es mélangé dans les paramètres de fermer_app dans le cas où il est appelé via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        g_signal_connect(G_OBJECT(boutonQuit), "clicked", G_CALLBACK(ferm_app), fenetreBarre);
    Le premier argument du callback appelé sera boutonQuit, et fenetreBarre sera le paramètre "gpointer data"

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    ah oui je m'étais effectivement tromper dans les paramètres de ma fonction ferm_app !
    Merci beaucoup!
    Je vais pouvoir avancer!

    ++

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

Discussions similaires

  1. Fermeture fenetre crée par code javascript
    Par Kerod dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/02/2010, 00h04
  2. probleme dissociation fermeture fenetres
    Par Septembre84 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 13/06/2008, 15h56
  3. Probleme fermeture fenetre
    Par lemagicien dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/12/2005, 14h40
  4. Probleme fermeture Thread
    Par Raton dans le forum MFC
    Réponses: 4
    Dernier message: 29/09/2005, 09h51
  5. pb fermeture fenetre parent
    Par logica dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/08/2005, 14h07

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