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.