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 héritage de GtkWindow


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut Glade et héritage de GtkWindow
    Bonjour,

    J'ai une classe YaogcPreferences qui hérite de GtkWindow, et qui est en quelques sorte une boite de dialogue et j'ai dessiné l'interface de cette boite de dialogue avec Glade.

    Seulement, je me pose une question, comment récupérer le toplevel à partir de mon GtkBuilder, car le toplevel c'est le widget dans lequel je suis, du coup je me demande même si c'est faisable

    Sinon, serait il plus judicieux de récupérer uniquement le container principal et de le mettre dans ma classe YaogcPreference ?

    Donc ben si quelqu'un à une petite idée, ça serait sympa
    Merci

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Une idée parmi d'autres. Je suppose que l'interface dessiné avec Glade à tout de même un widget parent. Par exemple une GtkBox ou autre dans laquelle les autres widgets s'insèrent.

    A partir de là tu peux charger ton interface dans ta class et utiliser la fonction gtk_widget_set_parent(); pour affecter la GtkBox (pris pour exemple) à ta GtkWindow.

  3. #3
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Ah, oui, pas bête, j'avais pas pensé au gtk_widget_set_parent, merci, je vais essayer comme ça

  4. #4
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    ça fonctionne pas, il me dit:
    (Yaogc:29861): Gtk-WARNING **: Can't set a parent on widget which has a parent
    Et quand je mets avant un gtk_widget_unparent sur le container, j'ai
    (Yaogc:31530): Gtk-WARNING **: mnemonic "n" wasn't removed for widget (0x69add0)

    (Yaogc:31530): Gtk-WARNING **: mnemonic "v" wasn't removed for widget (0x6f8820)
    Mais j'ai ces messages qu'a la fermeture de l'application.

    Voici 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
     
    struct _YaogcPreferencesPrivate {
        GtkBuilder *builder;
        GtkWidget *main_box;
     
        GFile *pref_file;
    };
     
    static void
    yaogc_preferences_init (YaogcPreferences *preferences)
    {
        YaogcPreferencesPrivate *priv;
        GError *error;
     
        preferences->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (
                preferences, YAOGC_TYPE_PREFERENCE, YaogcPreferencesPrivate);
     
        gtk_window_set_title (GTK_WINDOW(preferences), "Yaogc Preferences");
        gtk_container_set_border_width (GTK_CONTAINER(preferences), 5);
     
        /* Creating GtkBuilder */
        priv->builder = gtk_builder_new ();
     
        /* Loading the glade-xml file */
        error = NULL;
        gtk_builder_add_from_file (priv->builder, "preferences.glade", &error);
     
        if (error) {
            g_error ("Unable to load glade-xml file: %s", error->message);
            g_error_free (error);
        }
     
        /* Getting the main container */
        priv->main_box = GTK_WIDGET (gtk_builder_get_object(priv->builder, "vbox1"));
        gtk_widget_unparent (priv->main_box);
        gtk_widget_set_parent (priv->main_box, GTK_WIDGET(preferences));
    }

  5. #5
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Cela dit avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gtk_widget_unparent (priv->main_box);
    gtk_container_add (GTK_CONTAINER(preferences), priv->main_box);
    ça fonctionne, mais est-ce que c'est la bonne méthode ?

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Techniquement cela me semble correcte. Maintenant pour le principe je ne vois pas pourquoi tu n'utilises pas la fenêtre principale générée par Glade?

  7. #7
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Ben c'est pas que je ne veuille pas l'utiliser, mais je ne vois pas comment ça peut se faire

  8. #8
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    C'est trés simple. Tu accèdes à la fenêtre principale du fichier Glade comme tout autre widget. Comme tu l'as fait pour GTK_WIDGET (gtk_builder_get_object(priv->builder, "vbox1"));.
    Ensuite un simple gtk_widget_show_all(); sur ce pointeur et le tour est joué.

  9. #9
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Ben c'est pas possible, parce que le toplevel je suis en train de le construire (je trouve pas vraiment les mots pour expliquer...)
    Si je fais ça, j'instancie un nouveau widget, or c'est c'est pas ce que je veux

    Sinon, je peux faire comme tu dis, mais dans ce cas, je crée pas de nouvelle classe ?

  10. #10
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Hum...j'ai du mal à te suivre.

  11. #11
    Membre confirmé Avatar de Gamall
    Profil pro
    Étudiant ENSEA
    Inscrit en
    Août 2009
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant ENSEA

    Informations forums :
    Inscription : Août 2009
    Messages : 252
    Par défaut
    Bon, pas grave, je me comprends, je vais continuer avec mon gtk_container_add, ça fonctionne

    Merci

Discussions similaires

  1. [Glade-3] Ajouter une scrollbar à une GTKWindow
    Par cladjules dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 28/04/2009, 09h25
  2. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  3. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55
  4. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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