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+ Discussion :

Fenêtre de widgets vide


Sujet :

GTK+

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Points : 53
    Points
    53
    Par défaut Fenêtre de widgets vide
    Bonjour à toutes et tous,

    je travaille sur gtkmm en c++ avec codeblock.
    J'ai d'abord fait un fichier unique pour ouvrir une fenêtre avec un conteneur table rempli de widgest, ça fonctionne plutôt bien:

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    //#include <gtkmm/Label.h>
    #include <gtkmm/main.h>
    #include <gtkmm/table.h>
    #include <gtkmm/label.h>
    #include <gtkmm/window.h>
    #include <gtkmm/curve.h>
    #include <gtkmm/button.h>
    #include <gtkmm/stock.h>
    #include <gtkmm/drawingarea.h>
    #include <cairomm/context.h>
     
     
     
     
    int main(int argc, char* argv[]) {
        Gtk::Main app(argc, argv);
     
        Gtk::Window fenetre;
        /**/
    //    Gtk::DrawingArea myArea;
    //Cairo::RefPtr<Cairo::Context> myContext = myArea.get_window()->create_cairo_context();
    //myContext->set_source_rgb(1.0, 0.0, 0.0);
    //myContext->set_line_width(2.0);
        /**/
     
        Gtk::Table tableau(1, 2); //Création d'un tableau de 1 case par 2 cases, dont les cases ne sont pas nécessairement de même grandeur.
        tableau.resize(3, 6); //Redimensionner le tableau (2 par 2).
        tableau.set_col_spacings(30);
        tableau.set_row_spacings(30);
        //tableau.set
        fenetre.add(tableau);
     
        Gtk::Label etiquette01("initiale");
        Gtk::Label etiquette02("minimale");
        Gtk::Label etiquette03("maximale");
        Gtk::Label etiquette04("finale");
        Gtk::Label etiquette05("temps 0-90%");
        Gtk::Label etiquette06("temps 25-75%");
        etiquette01.set_can_focus(false);
        etiquette02.set_can_focus(false);
        etiquette03.set_can_focus(false);
        etiquette04.set_can_focus(false);
        etiquette05.set_can_focus(false);
        etiquette06.set_can_focus(false);
        tableau.attach(etiquette01, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette02, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette03, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette04, 3, 4, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette05, 4, 5, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette06, 5, 6, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
     
        Gtk::Label etiquette11("92");
        Gtk::Label etiquette12("23");
        Gtk::Label etiquette13("105");
        Gtk::Label etiquette14("98");
        Gtk::Label etiquette15("5.5");
        Gtk::Label etiquette16("3.5");
        etiquette11.set_can_focus(false);
        etiquette12.set_can_focus(false);
        etiquette13.set_can_focus(false);
        etiquette14.set_can_focus(false);
        etiquette15.set_can_focus(false);
        etiquette16.set_can_focus(false);
        tableau.attach(etiquette11, 0, 1, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette12, 1, 2, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette13, 2, 3, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette14, 3, 4, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette15, 4, 5, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette16, 5, 6, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
     
        Gtk::Button boutonGraphique("graphique"); //Création d'un bouton.
        boutonGraphique.set_can_focus(false); //Empêcher le bouton d'avoir le focus.
        tableau.attach(boutonGraphique, 0, 1, 2, 3, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        //boutonClose.signal_clicked().connect(sigc::ptr_fun(&Gtk::Main::quit)); //Connexion du signal clicked() à la fonction Gtk::Main::quit() qui ferme le programme.
     
        Gtk::Button boutonClose(Gtk::Stock::QUIT); //Création d'un bouton.
        boutonClose.set_can_focus(false); //Empêcher le bouton d'avoir le focus.
        tableau.attach(boutonClose, 5, 6, 2, 3, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        boutonClose.signal_clicked().connect(sigc::ptr_fun(&Gtk::Main::quit)); //Connexion du signal clicked() à la fonction Gtk::Main::quit() qui ferme le programme.
     
     
        //tableau.attach(bouton2, 1, 2, 0, 1); //Le widget prend l'espace qui lui est alloué et tout autre espace additionnel.
        //tableau.attach(bouton3, 0, 2, 1, 2, Gtk::FILL, Gtk::FILL, 25, 10); //Le widget prend l'espace qui lui est alloué. Ajout d'espace (25px horizontal et 10px vertical) autour du widget.
     
        fenetre.show_all(); //L'habituel show_all() pour afficher tous les widgets.
     
        Gtk::Main::run(fenetre);
     
        return 0;
    }
    puis j'ai voulu séparer en 3 fichiers, pour développer l'appli dans les règles de l'art, et vous remarquer que je suis un "artiste" en herbe concernant le c++ ...
    fenetre.hpp:
    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
    #ifndef DEF_FENETRE
    #define DEF_FENETRE
     
    //#include <gtkmm/box.h>
    //#include <gtkmm/buttonbox.h>
    #include <gtkmm/button.h>
    //#include <gtkmm/image.h>
    #include <gtkmm/label.h>
    #include <gtkmm/main.h>
    //#include <gtkmm/notebook.h>
    #include <gtkmm/stock.h>
    #include <gtkmm/window.h>
    #include <gtkmm/table.h>
     
    class Fenetre : public Gtk::Window {
        public :
            Fenetre();
            void modifierTitre(Gtk::Widget* page, int numPage);
     
        private :
        Gtk::Label etiquette01;
        Gtk::Label etiquette02;
        Gtk::Label etiquette03;
        Gtk::Label etiquette04;
        Gtk::Label etiquette05;
        Gtk::Label etiquette06;
        Gtk::Label etiquette11;
        Gtk::Label etiquette12;
        Gtk::Label etiquette13;
        Gtk::Label etiquette14;
        Gtk::Label etiquette15;
        Gtk::Label etiquette16;
        Gtk::Button boutonGraphique;
        Gtk::Button boutonClose;
        Gtk::Table tableau;
     
    };
     
    #endif
    puis un main.cpp:
    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
    #include "Fenetre.hpp"
     
    #include <gtkmm/main.h>
    #include <gtkmm/table.h>
    #include <gtkmm/label.h>
    #include <gtkmm/window.h>
    //#include <gtkmm/curve.h>
    #include <gtkmm/button.h>
    #include <gtkmm/stock.h>
     
     
     
    int main(int argc, char* argv[]) {
        Gtk::Main app(argc, argv);
     
        Gtk::Window fenetre;
        Gtk::Main::run(fenetre);
     
        return 0;
    }
    et enfin un fenetre.cpp:
    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
    #include "Fenetre.hpp"
     
    Fenetre::Fenetre() : boutonClose(Gtk::Stock::QUIT),
                            boutonGraphique("Graphique"),
                            etiquette01("initiale"),
                            etiquette02("minimale"),
                            etiquette03("maximale"),
                            etiquette04("finale"),
                            etiquette05("temps 0-90%"),
                            etiquette06("temps 25-75%"),
                            etiquette11("92"),
                            etiquette12("23"),
                            etiquette13("105"),
                            etiquette14("98"),
                            etiquette15("5.5"),
                            etiquette16("3.5"),
                            tableau(6,3){
        add(tableau);
        //add(etiquette01);
        boutonGraphique.set_can_focus(false);
        //boiteBoutonsH.pack_start(boutonPrecedent);
     
        boutonClose.set_can_focus(false);
        //boiteBoutonsH.pack_start(boutonSuivant);
     
        //boiteV.pack_start(boiteBoutonsH);
        etiquette01.set_can_focus(false);
        etiquette02.set_can_focus(false);
        etiquette03.set_can_focus(false);
        etiquette04.set_can_focus(false);
        etiquette05.set_can_focus(false);
        etiquette06.set_can_focus(false);
        etiquette11.set_can_focus(false);
        etiquette12.set_can_focus(false);
        etiquette13.set_can_focus(false);
        etiquette14.set_can_focus(false);
        etiquette15.set_can_focus(false);
        etiquette16.set_can_focus(false);
     
        tableau.set_can_focus(false);
     
        tableau.attach(etiquette01, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette02, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette03, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette04, 3, 4, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette05, 4, 5, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette06, 5, 6, 0, 1, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
     
        tableau.attach(etiquette11, 0, 1, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette12, 1, 2, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette13, 2, 3, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette14, 3, 4, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette15, 4, 5, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(etiquette16, 5, 6, 1, 2, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
     
        tableau.attach(boutonGraphique, 0, 1, 2, 3, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
        tableau.attach(boutonClose, 5, 6, 2, 3, Gtk::SHRINK, Gtk::SHRINK); //Ajout d'un widget dans le tableau : ce widget sera de (0, 0) à (1, 1). Le widget prend le moins d'espace possible.
     
     
     
        show_all();
    }
     
    void Fenetre::modifierTitre(Gtk::Widget* page, int numPage) {
        //Modifier le titre de la fenêtre selon l'onglet choisi.
    //    set_title(barreOnglets.get_tab_label_text(*barreOnglets.get_nth_page(numPage)));
    }
    pas de problème de compil ni d'exécution, mais ma fenêtre s'affiche vide

    J'imagine que j'ai fait des erreurs en essayant d'améliorer la structure de mon code en plusieurs fichiers, mais je crois que c'est important pour y voir clair par la suite ...

    Quelqu'un a-t-il une idée pour me dépanner?

    Merci bien.

  2. #2
    Membre régulier Avatar de Persistant
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2016
    Messages : 50
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    J'ai joué au jeux des différences d'après l'exemple HelloWorld
    J'ai trouvé que l'initialisation des widgets n'était pas dans l'ordre de déclaration(cf constructeur de Fenetre)
    J'ai trouvé que le destructeur n'était pas déclaré.

    PS: Même si mes remarque ne corrige pas ton problème, tu aurais pu simplifier ton exemple.

  3. #3
    Membre régulier Avatar de Persistant
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2016
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2016
    Messages : 50
    Points : 73
    Points
    73
    Par défaut Et de trois
    Dernière petite différence erreur,

    au lieu de

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 114
    Points : 53
    Points
    53
    Par défaut
    Salut,

    je m'étais absenté et suis de retour.

    oui effectivement il y a bien ces erreurs.

    J'ai changé de stratégie, je vais développer l'interface avec glade, puis travailler en C++ avec gtkmm (et gtk::builder pour faire le lien sur le ficheir xml)

    Je ne trouve pas d'exemple qui combine ces 3 choix, un petit hello world + 1 bouton (avec traitement du signal) et un petit text view ..... le pied. Mais je m'y colle.

    Cette ambition va très rapidement générer un nouveau post ....

    Merci pour tes remarques / corrections

Discussions similaires

  1. Fenêtre Subversion soudainement vide
    Par g_h dans le forum NetBeans Platform
    Réponses: 0
    Dernier message: 14/10/2010, 15h31
  2. Fenêtre de recherche vide
    Par Just-Soft dans le forum Windows XP
    Réponses: 4
    Dernier message: 06/09/2008, 14h29
  3. Appariton d'une fenêtre vide
    Par dedeloux dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 25/07/2005, 17h51
  4. Problème d'affichage: fenêtres (frames) vides!
    Par NdmaX dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 12/07/2005, 21h23

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