Hlavní navigace

Gtkmm: pište GTK+ v jazyce C++

8. 10. 2010
Doba čtení: 3 minuty

Sdílet

Toto je první článek našeho nového seriálu o knihovně gtkmm, která slouží k výrobě grafických programů v C++ při použití prostředí GTK, známého třeba z GNOME. Dnes si řekneme pár základních údajů a něco o její historii a ukážeme si, jak si ji nainstalovat a udělat s její pomocí jednoduchý program.

Pár slov o gtkmm

Co to vlastně je?

Knihovna gtkmm (přesněji rozhraní pro knihovnu GTK+)  slouží k tvorbě „klikátek“, neboli GUI – grafického uživatelského prostředí. Ač by se některým ortodoxním linuxákům (pokud takoví ještě jsou), kteří používají zásadně terminál, mohlo zdát, nejedná se o knihovnu pro Windows. Alespoň ne tak úplně. S její pomocí se totiž dají tvořit jak aplikace pro Windows, tak i pro Linux, FreeBSD, NetBSD, Solaris, Mac OS X a další. Napsána byla v C++, takže se využívá v C++ a je k dispozici pod licencí LGPL. Dá se tedy použít pro vývoj open-source i proprietárních programů.

Proč ji používat?

S gtkmm můžeme plně využít to, co pouhému C s GTK+ chybí – objektově orientované rozhraní. Například si můžeme vyrobit svůj vlastní typ widgetu. Kód programu je také kratší, než kdybychom použili přímo GTK+. Knihovnu gtkmm využívají například programy Inksca­pe, Gobby, GParted a Ardour.

Trocha historie

Historie gtkmm sahá někde na začátek tohoto tisíciletí, kdy vznikla verze s označením 1.2 (snaží se kopírovat vývoj GTK+). Původně jmenovalo gtk--, ale bohužel to „–“ nějak nebraly vyhledávače, tak změnilo název na gtkmm (GTK minus minus). Aktuální verze (2.20.0) byla vydána 29. března tohoto roku. Starají se o ni hlavně pánové Murray Cumming a Daniel Elstner.

První program

Stáhnutí knihovny

Abychom mohli vůbec program přeložit, musíme mít samotnou knihovnu. K tomu na Linuxu stačí nainstalovat jeden balíček (ostatní už tam jsou, nebo se nainstalují samy). Pokud používáte Debian nebo Ubuntu, jedná se o balíček se jménem libgtkmm-2.4-dev. Do terminálu pak stačí napsat sudo apt-get install libgtkmm-2.4-dev. Ostatní odkážu na stahovací stránku www.gtkmm­.org/en/downlo­ad.html.

Překlad

Na Linuxu si vystačíme s překladačem gcc a libovolným textovým editorem (ne že by na Linux IDE neexistovaly). Příkaz na překlad zdrojového souboru „HelloWorld.cpp“ vypadá takto:

g++ HelloWorld.cpp -o RunHelloWorld `pkg-config gtkmm-2.4 --cflags --libs`

Ve Windows použijeme třeba Dev-C++. To se dá stáhnout třeba ze SourceForge. Kdo jej ještě nikdy nepoužíval, nechť si vytvoří nový projekt, a to v menu Soubor->Nový->Projekt… Zvolíme třeba „Empty Project“, nazveme jej AhojSvete a stiskneme tlačítko Ok. Dev-C++ se ještě zeptá, kam ho má uložit, vytvoříme nový zdrojový soubor (Ctrl-N) a potom už můžeme psát kód. Na stisknutí klávesy F9 odpovídá Dev-C++ zkompilováním a následným spuštěním programu.

Samotný program

Jeden z nejjednodušších programů, které využívají gtkmm, může mít třeba pouhých 24 řádků (však také nejužitečnějším činem, kterého je schopen, je ukončení se) a vypadat takto:

#include <gtkmm.h>
class AhojSvete : public Gtk::Window {
        public:
                AhojSvete();
        protected:
                Gtk::Label napis;
};
AhojSvete::AhojSvete()
: napis("Ahoj, světe!")
{
        set_border_width(50);
        add(napis);
        napis.show();
}
int main(int argc, char *argv[]){
        Gtk::Main kit(argc, argv);
        AhojSvete okno;
        Gtk::Main::run(okno);
        return 0;
}

Jak lze vidět na screenshotu, aplikace vytvoří okno s nápisem „Ahoj, světe!“, jehož název se odvíjí podle názvu souboru, ve kterém je uložený její strojový kód. S oknem se dají dělat běžné operace, jako je minimalizace, zavření, roztahování apod. Dal by se udělat program, který by zabíral jen šest řádků, ale to už by bylo jen prázdné okno.
 

Program pod drobnohledem

První řádek je jasný – bez inkludace knihovny ji nebudeme moci použít. Třetím řádkem začneme tvořit potomka třídy Gtk::Window se jménem AhojSvete. AhojSvete obsahuje jednu instanci Gtk::Label se jménem napis. Na jedenáctém řádku začíná popis konstruktoru. Řádek dvanáctý má za úkol vytvořit popisek s textem „Ahoj, světe!“. Následuje nastavení velikosti prázdného okraje od textu (v pixelech), přidání textu do kontejneru a samotné zobrazení. Řádek číslo 21 se postará o vytvoření instance okno třídy AhojSvete a následující řádek vše spustí.

Pokračování

Příště si probereme základní widgety (udělátka – tlačítka, vstupní pole atd.). Později možná přijde na řadu tvorba vlastních udělátek a popis Glade, grafického programu určeného k návrhu grafických programů. Ještě vás poprosím o hlas v následující anketě a pro dnešek se s vámi loučím.

root_podpora

Knihovna gtkmm je objektově orientovaná. Mám se snažit vysvětlit ji i neznalcům OOP?

Zdroje, odkazy

http://www.gtkmm­.org/en/ – domovská stránka projektu

http://en.wiki­pedia.org/wiki/gtkmm – stránka o gtkmm na anglické Wikipedii

http://glade.gno­me.org/ – domovská stránka programu Glade

Byl pro vás článek přínosný?