Hej världen i gtkmm
Vi har nu lärt oss tillräckligt för att titta på ett riktigt exempel. Enligt en uråldrig tradition inom datavetenskap introducerar vi nu ”Hej världen”, på gtkmm-sätt:
Försök kompilera och köra det innan du går vidare. Du bör se något i stil med detta:
Visst är det omvälvande? Låt oss utforska koden. Först har vi klassen HelloWorld:
class HelloWorld : public Gtk::Window
{
public:
HelloWorld();
~HelloWorld() override;
protected:
//Signalhanterare:
void on_button_clicked();
//Medlemskomponenter:
Gtk::Button m_button;
};
Denna klass implementerar ”Hej världen”-fönstret. Den härleds från Gtk::Window och har en ensam Gtk::Button som medlem. Vi har valt att låta konstruktorn gör allt initieringsjobb för fönstret, inklusive att konfigurera signalerna. Här är den utan kommentarer:
HelloWorld::HelloWorld()
: m_button("Hej världen")
{
m_button.set_margin(10);
m_button.signal_clicked().connect(sigc::mem_fun(*this,
&HelloWorld::on_button_clicked));
set_child(m_button);
}
Observera att vi har använt en initierarsats för att ge m_button-objektet etiketten ”Hej världen”.
Härnäst anropar vi set_margin()-metoden för vår Button. Denna ställer in mängden utrymme runt knappen.
We then hook up a signal handler to m_button's clicked signal. This prints our friendly greeting to stdout.
Next, we use the Window's set_child() method to put m_button in the Window. The set_child() method places the Widget in the Window.
Låt oss nu titta på vårt programs main()-funktion. Här är den utan kommentarer:
int main(int argc, char* argv[])
{
auto app = Gtk::Application::create("org.gtkmm.example");
return app->make_window_and_run<HelloWorld>(argc, argv);
}
Först instansierar vi ett objekt som lagras i en Glib::RefPtr-smartpekare som heter app. Detta är av typen Gtk::Application. Varje gtkmm-program måste ha ett av dessa.
Next we call make_window_and_run() which creates an object of our HelloWorld class, shows that Window and starts the gtkmm event loop. During the event loop gtkmm idles, waiting for actions from the user, and responding appropriately. When the user closes the Window, make_window_and_run() will return, causing our main() function to return. The application will then finish.
Som det enkla exempel vi visade tidigare så använder detta ”Hej världen”-program inte kommandoradsparametrarna.