Hlavní navigace

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.

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?

22. 10. 2010 9:44

Xjmeno363 (neregistrovaný)

díky za nic...jen více takových reakcí, to určitě pomůže

naštěstí Tomáš Velecký je proti vám jiný frajer...
http://www.root.cz/clanky/zakladni-widgety-v-gtkmm/


13. 10. 2010 10:07

MMN (neregistrovaný)

eclipse? To má jako psát nastavení každého možného ide?
Doporučuji zdroják zkompilovat přímo g++ v příkazovém řádku.


Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!