Re: why is class HelloWorld : public Gtk::Window ?
- From: José Alburquerque <jaalburquerque cox net>
- To: Damon Register <damon w register lmco com>
- Cc: gtkmm-list <gtkmm-list gnome org>
- Subject: Re: why is class HelloWorld : public Gtk::Window ?
- Date: Mon, 09 Feb 2009 17:09:14 -0500
Damon Register said the following:
In the gtkmm tutorial
http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/sec-helloworld.html
and elsewhere I have seen this example method used for a gtkmm app.
There is the main() and a class that descends from Gtk::Window as in
class HelloWorld : public Gtk::Window
Why does HelloWorld descend from Gtk::Window?
The classes that derive from Gtk::Window are themselves a Gtk::Window
which means they can be shown on the screen and can contain other
widgets that can also be shown within the window to the user. See the
Gtk::Window API:
http://www.gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGtk_1_1Window.html.
I have seen examples for libglademm or gtk-builder which also have
a class such as HelloWorld that descends from Gtk::Window. So, I have
two questions:
1. Is it necessary to descend from Gtk::Window
when _not_ using libglademm or gtk-builder such as in the tutorial?
2. Is it necessary to descend from Gtk::Window
when using libglademm or gtk-builder?
Deriving from Gtk::Window is necessary when the class being developed is
to be used as a window to be shown on the screen.
Why do I care? In trying to find out why I get the
"assertion `G_IS_OBJECT (object)' failed" message, I am trying
different program configurations.
Why not run the different configurations through a debugger? It can
help you pinpoint exactly where the warning is coming from.
In the process I have noticed
something interesting. In an example where
class HelloWorld : public Gtk::Window
I create an instance of the class in the main() with this
HelloWorld window;
and then in the class constructor I have
refXml = Gtk::Builder::create_from_file("../hello.xml");
refXml->get_widget("layout1", layout1);
layout1->reparent(*this);
When using libglademm I have something similar but in either case I
get the impression that I may have two Windows; one resulting from
refXml = Gtk::Builder::create_from_file("../hello.xml");
and another because the class descends from Gtk::Window. Is
that really happening as I suspect?
No. Unless you've defined a Gtk::Window widget in your glade file,
you'll only have the one window. Also, it is not a programming error to
have more than one Gtk::Window if you need them.
I also noticed that the hello
class is destroyed after Gtk::Main::run finishes. Is that ok?
If you don't get any error messages or warnings, yes. Debugging might
help you pinpoint errors if there are any.
As an experiment I tried
connecting to Gtk::Main::signal_quit and in my signal handler
I call remove(). When I run the program and then exit, I don't
get the error message.
I tried a second experiment which proved interesting (for me
anyway). Instead of having the hello class descend from
Gtk::Window, I have it not descend from anything. In the
hello constructor I have
refXml = Gtk::Builder::create_from_file("../hello.xml");
refXml->get_widget("hello_main_window", pWindow);
and in the main() I have
kit.run(*(window.pWindow));
Am I on the right track so far? At this point I favor making
my class not descend from Gtk::Window as it seems to work but
I would like to know if this makes any sense before I go off
and change my applications.
Either way will work. If you have a class that derives from Gtk::Window
in your program you can use that class as a window instead of the
"hello_main_window" widget defined in your glade file. If you keep the
Gtk::Window in your glade file, you don't need to have a class that
derives from Gtk::Window (unless you need more than one window for your
program).
Damon Register
_______________________________________________
gtkmm-list mailing list
gtkmm-list gnome org
http://mail.gnome.org/mailman/listinfo/gtkmm-list
--
José Alburquerque
jaalburquerque cox net
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]