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

Tomáš Velecký 8. 10. 2010

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.

widgety

Anketa

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
Našli jste v článku chybu?
120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

Podnikatel.cz: ČSSZ posílá přehled o důchodovém kontě

ČSSZ posílá přehled o důchodovém kontě

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

DigiZone.cz: RRTV: frekvence pro Country Radio

RRTV: frekvence pro Country Radio

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Vitalia.cz: Běháte a nehubnete? 6 častých chyb

Běháte a nehubnete? 6 častých chyb

Lupa.cz: Proč jsou firemní počítače pomalé?

Proč jsou firemní počítače pomalé?

DigiZone.cz: Sat novinky: NASA Ultra HD (4K)

Sat novinky: NASA Ultra HD (4K)

Root.cz: Hořící telefon Samsung Note 7 zapálil auto

Hořící telefon Samsung Note 7 zapálil auto

Vitalia.cz: Nová vakcína proti chřipce se aplikuje nosem

Nová vakcína proti chřipce se aplikuje nosem

Podnikatel.cz: Tyto pojmy k #EET byste měli znát

Tyto pojmy k #EET byste měli znát

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

Vitalia.cz: Tohle všechno se dá usušit

Tohle všechno se dá usušit

DigiZone.cz: Budoucnost TV vysílání ve Visegrádu

Budoucnost TV vysílání ve Visegrádu

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Měšec.cz: „Ukradli“ jsme peníze z bezkontaktních karet

„Ukradli“ jsme peníze z bezkontaktních karet

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Podnikatel.cz: Letáky? Lidi zuří, ale ony stále fungují

Letáky? Lidi zuří, ale ony stále fungují

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?