Pierwsze kroki w Qt

[ niedziela, 23 Sierpień 2009 ]

Darmowa biblioteka interfejsu graficznego Qt dzięki swojej innowacyjności, wyglądzie i wygodzie w implementacji stała się jedną z najpopularniejszych. Nierzadko spotyka się ja na zamkniętych, otwartych, a nawet przenośnych platformach. Z tego względu warto nauczyć się tworzyć aplikacje za jej pomocą. Wystarczy znajomość obiektowego C++ i posiłkowanie się dokumentacją.

Narzędziem IDE, które także posiada dizajner interfejsu GUI, a wyszło spod skrzydeł zespołu deweloperów Qt, jest Qt Creator (paczka dostępna w SCXD). Właśnie z jego pomocą postawimy pierwsze kroki, co nie oznacza, że nie nadaje się do profesjonalnych zastosowań. Z góry zaznaczam, iż nie mam na celu opisu całości aplikacji, lecz jedynie kilka jej kluczowych elementów mogących wydać się nieoczywiste. Wersja biblioteki, na której opieram opis, to 4. Nie ograniczajmy jednak Qt jedynie do biblioteki graficznej, ponieważ zawiera ona także biblioteki sieciowe i wiele innych będących chociażby odpowiednikami z innych popularnych bibliotek.

Tworzenie nowego projektu
W wyborze rodzaju projektów decydujemy się na Qt4 Gui Application. Z listy modułów zaznaczamy te, które będą nam potrzebne do stworzenia aplikacji. Metody, które zawierają, należy sprawdzić w dokumentacji.

Po lewej pojawi się lista plików będących elementami projektu:

  • *.pro — wylistowanie plików projektu. Na jego podstawie generowany jest Makefile. Zarządzany przede wszystkim przez Qt Creator
  • main.cpp — zawiera główną funkcję
  • main (). Ograniczmy się w nim do operacji związanych stricte z C++, typu wygenerowanie zarodka liczb pseudolosowych (srand ())
  • mainwindow.cpp — kod klasy MainWindow, tzn. związany z zarządzaniem wyglądem GUI, inicjujący często funkcje znajdujące się poza nim. Do zarządzania samym głównym oknem używamy obiektu MainWindow::MainWindow, np.
    void MainWindow::metoda () {
       // ...
       MainWindow::resize (width, height);
    }

    Natomiast do widgetów się w nim znajdujących został skonstruowany obiekt MainWindow::ui:

    void MainWindow::metoda () {
       // ...
       ui->napis->setText ("jakiś tekst");
    }

    Początkowe ustawienia obiektów warto umieścić w metodzie MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow). Jeżeli chcielibyśmy mieć dostęp do danego elementu ui z innej klasy niż MainWindow, dobrym pomysłem jest utworzenie obiektu dostępnego w niej całej, który z kolei jest typu naszego elementu. Tj. przekazujemy wskaźnik do elementu przez argument funkcji, a funkcja ta funkcja przechowuje go we wskaźniku dostępnym tylko w macierzystej klasie:

    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent), ui(new Ui::MainWindow) {
       Klasa *obiekt;
       obiekt = new Klasa;
       // ...
    }
    
    MainWindow::funkcja () {
       obiekt->new_ui_table (*ui->table);
    }

    Od tej pory jesteśmy w stanie zarządzać elementem GUI nazwanym table z klasy Klasa

  • *.h — zwykłe pliki nagłówkowe
  • mainwindow.ui — po dwukrotnym kliknięciu otworzy się graficzny edytor interfejsu. Za jego pomocą jesteśmy w stanie umieszczać widgety z listy w oknie MainWindow, a następnie edytować ich początkowe parametry.
  • *.qrc — po wybraniu otworzy się edytor, w którym możemy dodawać prefiksy (adekwatne do lokalizacji w systemie po instalacji), a w prefiksach pliki będące w użyciu przez nasz projekt, np. ikony. Plikom warto nadać aliasy

Edytor C++

Edytor plików *.ui

Sloty
By mogło nastąpić wywołanie danej funkcji wskutek wykonania jakiejś operacji na danym elemencie interfejsu graficznego przez użytkownika, potrzebny jest slot. Tworzymy go w edytorze *.ui, klikając na drugą ikonkę od lewej nazwaną Edit signals/slots i przeciągając kursorem od widgetu do pustego pola. Otworzy się okno, gdzie wybieramy przy jakiej akcji slot ma zostać uruchomiony (metoda prób bądź dokumentacja) i funkcję, która wtedy zostanie wywołana. Istnieje możliwość dodania własnej. Pamiętajmy o umieszczeniu jej w private slots w pliku nagłówkowym. Definiujemy ją w klasie MainWindow.

Akcje menu
Po dodaniu do listy menu opcji, pojawi się ona w zakładce Action editor. Tam wypada zmienić jej nazwę. Natomiast akcją będzie metoda klasy MainWindow o nazwie “on__activated”:

void MainWindow::on_wyjdz_activated () {
    QCoreApplication::quit ();
}

Przykład
Żeby lepiej zrozumieć, jak to wszystko działa, napisałem prostą implementację Gry w życie Conway’a do pobrania tutaj. Zapraszam do przejrzenia kodu źródłowego.
QameOfLife

Kompilacja
Kompilujemy w katalogu, gdzie zapisaliśmy projekt:

$ qmake
$ make

Tutaj Makefile tworzony jest za pomocą narzędzia będącego częścią Qt qmake, lecz niebawem opiszę, jak przygotować projekt tak, aby Makefile generowany był poprzez cmake.

Przydatne adresy

Podsumowanie
Liczę, że artykuł stanie się przydatny do wkroczenia w świat programowania w Qt dla osób, które nie miały jeszcze z tą biblioteką styczności. Pamiętajmy, że wszystkie możliwości Qt wykraczają poza jakikolwiek artykuł, dlatego najlepszym źródłem wiedzy jest oficjalna dokumentacja.

Za wprowadzenie mnie w opisany świat dziękuję Juzefowi.

Wiadomość źródłowa: Pierwsze kroki w Qt (SlackBlog)

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

RSS feed

Komentarze

Brak komentarzy.

Komentarze do tego wpisu są wyłączone.

Reklama :)

jakilinux.org - Linux krok po kroku!