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:
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++ ...
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; }
fenetre.hpp:
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
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
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 #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; }
pas de problème de compil ni d'exécution, mais ma fenêtre s'affiche vide
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))); }
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.
Partager