#1 Le 20/02/2008, à 18:24
- Darunia
GTKMM : Ouvrir une fenetre à partir d'un autre fenetre
Salut à tous,
Je debute GTKMM et je cale sur un truc vraiment débile : j'ai une barre d'outils dans ma fenetre principale, et je souhaite ouvrir une autre fenetre quand je clique sur un des boutons de la barre.
J'ai donc créé une nouvelle classe qui hérite de Gtk::Window.
Code de la fenetre (en partie) :
CAddressInput::CAddressInput() :
Window(),
VBox(0, false),
InputHBox(0, false),
ButtonsHBox(0, false),
Text("Enter address to jump to :"),
AddrEntry(),
CmdOK("OK"),
CmdCancel("Cancel")
{
set_title("Jump to address");
set_default_size(200, 60);
InputHBox.pack_start(Text);
InputHBox.add(AddrEntry);
VBox.pack_start(InputHBox);
ButtonsHBox.pack_start(CmdCancel);
ButtonsHBox.add(CmdOK);
VBox.add(ButtonsHBox);
add(VBox);
show_all_children();
}
Code censé afficher la fenetre :
CAddressInput AddrInput;
AddrInput.set_modal(true);
AddrInput.show();
Le code d'appel est bien executé (verifié avec le debugger), le truc c'est que rien ne se passe, et je n'ai meme pas le moindre warning dans la console ?!?
Hors ligne
#2 Le 02/03/2015, à 17:42
- dguichaoua49
Re : GTKMM : Ouvrir une fenetre à partir d'un autre fenetre
Comme depuis le temps personne n'a donné de solution, et comme j'ai eu beaucoup de mal à la trouver voici une solution :
Fichier main.cpp
#include "win_mere.hpp"
#include <gtkmm/application.h>
int main(int argc, char *argv[])
{
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.example");
//Créer la fenêtre mère
win_mere my_win_mere;
//On l'affiche, l'exécute
return app->run(my_win_mere);
}
On créer une classe "win_mere" pour la fenêtre mère.
Le fichier win_mere.hpp :
#ifndef GTKMM_EXAMPLE_WINDOW_MERE_H
#define GTKMM_EXAMPLE_WINDOW_MERE_H
#include <gtkmm/window.h>
#include <gtkmm/button.h>
#include "win_fille.hpp"
class win_mere : public Gtk::Window
{
public:
win_mere();
virtual ~win_mere();
protected:
//Signal handlers:
void on_button_clicked();
//Le boutton:
Gtk::Button m_button;
//On créer la fenêtre fille ici !!!
win_fille my_win_fille;
};
#endif //GTKMM_EXAMPLE_WINDOW_MERE_H
Le fichier win_mere.cpp :
#include "win_mere.hpp"
win_mere::win_mere()
{
//Fenêtre avec un seul bouton "Ouvrir Fille" pour afficher la fenêtre fille
m_button.add_pixlabel("info.xpm", "Ouvrir Fille");
set_title("win_mere!");
set_border_width(10);
m_button.signal_clicked().connect( sigc::mem_fun(*this,
&win_mere::on_button_clicked) );
add(m_button);
show_all();
}
win_mere::~win_mere()
{
}
void win_mere::on_button_clicked()
{
//quand on appuis sur le bouton on ouvre la fenêtre fille
my_win_fille.set_modal(true); //pour que la fenêtre fille soit modale
my_win_fille.show(); //affiche la fenêtre fille
}
On créer une classe "win_fille" pour la fenêtre fille.
Le fichier win_fille.hpp :
#ifndef GTKMM_EXAMPLE_WINDOW_FILLE_H
#define GTKMM_EXAMPLE_WINDOW_FILLE_H
#include <gtkmm/window.h>
#include <gtkmm/button.h>
class win_fille : public Gtk::Window
{
public:
win_fille();
virtual ~win_fille();
protected:
//Signal handlers:
void on_button_clicked();
//Child widgets:
Gtk::Button m_button;
};
#endif //GTKMM_EXAMPLE_WINDOW_FILLE_H
Le fichier win_fille.cpp :
#include "win_fille.hpp"
win_fille::win_fille()
{
//Fenêtre avec un seul bouton "Fermer"
m_button.add_pixlabel("info.xpm", "Fermer");
set_title("win_fille!");
set_border_width(10);
m_button.signal_clicked().connect( sigc::mem_fun(*this,
&win_fille::on_button_clicked) );
add(m_button);
show_all_children(); //et non show_all sinon la fenêtre fille vas s'afficher tout de suite
}
win_fille::~win_fille()
{
}
void win_fille::on_button_clicked()
{
//quand on clique sur le bouton on ferme la fenêtre fille pour redonner le focus à la fenêtre mère
hide();
}
Dernière modification par dguichaoua49 (Le 02/03/2015, à 17:47)
Hors ligne