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 :

Problème ouverture fenêtres


Sujet :

GTK+ avec C & C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Problème ouverture fenêtres
    Bonjour à tous,

    j'ai un petit soucis avec Gtk+, je voudrais créer un lien entre deux fenêtres, je m'explique. Je voudrais que lorsque je détruis une fenêtre à l'aide d'un bouton, une autre se lance automatiquement. Mais vous comprendrez mieux à l'aide de mon code.

    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
    66
    67
    68
    69
    70
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    typedef struct test2
    {
        GtkWidget *button;
        GtkWidget *win;
        GtkWidget *win2;
        GtkWidget *vbox;
     
        gulong handler_id[3];
     
    }test2;
     
    void launch(test2 *new_)
    {
        new_->win2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_container_set_border_width (GTK_CONTAINER (new_->win2), 8);
        gtk_window_set_title (GTK_WINDOW (new_->win2), "Hello World 2 ");
        gtk_window_set_position (GTK_WINDOW (new_->win2), GTK_WIN_POS_CENTER);
     
        /* Create the main window */
        gtk_widget_show_all (new_->win2);
    }
     
    void byebye(test2 *new_)
    {
        gtk_widget_destroy(new_->win);
     
        g_signal_handler_disconnect (new_->button, new_->handler_id[2]);
        g_signal_handler_disconnect (new_->win, new_->handler_id[0]);
        g_signal_handler_disconnect (new_->win, new_->handler_id[1]);
    }
     
    int main (int argc, char *argv[])
    {
      test2 *new_ = NULL;
     
      new_ = (test2*)malloc(sizeof(test2));
     
      /* Initialize GTK+ */
      g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
      gtk_init (&argc, &argv);
      g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
     
      /* Create the main window */
      new_->win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_container_set_border_width (GTK_CONTAINER (new_->win), 8);
      gtk_window_set_title (GTK_WINDOW (new_->win), "Hello World");
      gtk_window_set_position (GTK_WINDOW (new_->win), GTK_WIN_POS_CENTER);
     
      //gtk_widget_realize (new_->win2);
      new_->handler_id[0] =  g_signal_connect (new_->win, "delete-event", gtk_main_quit, NULL);
      new_->handler_id[1] = g_signal_connect (new_->win, "destroy", G_CALLBACK(launch), new_);
     
      /* Create a vertical box with buttons */
      new_->vbox = gtk_vbox_new (TRUE, 6);
      gtk_container_add (GTK_CONTAINER (new_->win), new_->vbox);
     
      new_->button = gtk_button_new_with_label ("byebye");
      gtk_box_pack_start (GTK_BOX (new_->vbox), new_->button, TRUE, TRUE, 0);
      new_->handler_id[2] = g_signal_connect (new_->button, "clicked", G_CALLBACK(byebye), new_);
     
      /* Enter the main loop */
      gtk_widget_show_all (new_->win);
     
      gtk_main ();
     
      return 0;
    }
    Je me retrouve donc avec un segfault et je bloque.

    Merci d'avance pour votre aide.

  2. #2
    Futur Membre du Club
    Inscrit en
    Octobre 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    J'ai corrigé mon problème une simple erreur, j'avais oublié le GtkWidget *widget dans les paramètres de mes fonctions.

  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
    Points : 2 002
    Points
    2 002
    Par défaut
    Remarque 1: tu n'as pas besoin d'allouer dynamiquement ta structure à la ligne 39. Tu peux l'allouer directement dans la pile, en écrivant à la ligne 37:
    La déclaration étant dans le main, la durée de vie de ta structure est la même que celle de ton programme, pas de soucis de ce côté là. Et pas d'éventuel message sur une fuite de mémoire si tu dois utiliser Valgrind un jour, sachant que dans ton programme tu n'as pas libéré la mémoire que tu as allouée ligne 39. Ce n'est pas forcément gênant, vu que le système d'exploitation va s'en charger, mais la structure sur la pile est ici plus simple, et plus propre.

    Remarque 2: évite d'utiliser des noms comme new_ pour tes variables, car new est un mot clé réservé en C++ et en plus sémantiquement tu ne donnes pas d'info sur ce que c'est réellement (c'est nouveau, mais un nouveau quoi ?). Pour une interface graphique, j'appelle par exemple la structure contenant mon interface "ihm" ou "gui". Si cela contient toutes les informations de ton application, alors "app" vaut le coup aussi.
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

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

Discussions similaires

  1. Problème ouverture nouvelle fenêtre
    Par kewti dans le forum Général Java
    Réponses: 2
    Dernier message: 16/06/2014, 15h51
  2. [Débutant] Problème ouverture du fenêtre
    Par ralacorn dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 28/03/2013, 22h57
  3. Problème ouverture fenêtre
    Par NameX dans le forum Qt
    Réponses: 3
    Dernier message: 12/02/2010, 09h06
  4. Problème ouverture de fenêtre
    Par shawn12 dans le forum MFC
    Réponses: 4
    Dernier message: 23/01/2008, 15h50
  5. [MFC] problème ouverture de fenêtre
    Par pytpyt dans le forum MFC
    Réponses: 1
    Dernier message: 19/04/2006, 14h05

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