Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych Instytut Informatyki Rok akademicki 2008/2009 Praca dyplomowa inżynierska Filip Piechocki Tytuł pracy Opiekun pracy: Tytuł Imię i Nazwisko Ocena........................................................................... Podpis Przewodniczącego Komisji Egzaminu Dyplomowego
Specjalność: Informatyka Inżynieria oprogramowania i systemy informacyjne Data urodzenia: 28 września 1985 r. Data rozpoczęcia studiów: 21 lutego 2005 r. Życiorys Nazywam się......................................... podpis studenta Egzamin dyplomowy Złożył egzamin dyplomowy w dn....................................................... Z wynikiem.......................................................................... Ogólny wynik studiów................................................................ Dodatkowe wnioski i uwagi Komisji..........................................................................................................................................
Streszczenie Praca ta prezentuje... Słowa kluczowe: słowa kluczowe. Abstract Title: Thesis title. This thesis describes... Key words: key words.
Spis treści 1. Biblioteka Qt4.......................................... 1 1.1. Widżety i layouty...................................... 2 1.2. Architektura Model/Widok................................. 2 2. Opis problemu.......................................... 3 2.1. Co jest tematem niniejszej pracy?............................. 3 2.2. Po co jest tworzone to rozwiązanie?............................ 3 3. Zbadane możliwości rozwiazania problemu.......................... 4 3.1. Rozwiązanie pierwsze................................... 4 3.2. Rozwiązanie drugie..................................... 4 3.3. Rozwiazanie trzecie.................................... 4 3.4. Rozwiązanie czwarte.................................... 4 4. Realizacja wybranego sposobu................................. 5 4.1. ProxyModel........................................ 5 4.2. Zdarzenia.......................................... 5 i
1. Biblioteka Qt4 Hasłem reklamowym biblioteki Qt firmy Qt Software (dawniej Trolltech) jest: Code less. Create more. Deploy everywhere. Pisz mniej kodu. Stwórz więcej. Używaj wszędzie.. Ukazuje ono doskonale ideologię i to co skłoniło twórców do stworzenia tejże biblioteki. Otóż umożliwia ona tworzenie aplikacji, których kod źródłowy jest niezależny od platformy, dzięki czemu raz napisany kod możemy kompilować i uruchamiać zarówno na systemach z rodziny Microsoft Windows, jak i Linux lub Mac OS. Jak to możliwe? Otóż Qt to zestaw klas (także i narzędzi), które opakowują standardowe funkcje systemowe i udostępniają w postaci własnego API identycznego na każdej platformie, na którą jest dostępne. Dzięki temu pisząc kod w języku C++ z wykorzystaniem Qt i standardowych funkcji języka, jesteśmy w stanie uruchomić go na praktycznie większości platform dostępnych na rynku (w ostatniej wersji 4.4 są to: MS Windows, Linux/X11, Mac OS, Embedded Linux, Windows CE). Qt składa się z następujących modułów: QtCore podstawowy zestaw klas wykorzystywany przez inne moduły, zawsze wykorzystywany w aplikacjach wykorzystujących Qt QtGui zawiera komponenty wykorzystywane w graficznych interfejsach użytkownika (GUI) QtNetwork zestaw klas ułatwiających tworzenie aplikacji sieciowych QtOpenGL klasy wspierające wykorzystanie OpenGL QtScript klasy do obsługi skryptów Qt Script QtSql klasy integrujące aplikacje z bazami danych z wykorzystaniem SQL QtSvg klasy pozwalające wyświetlać i obsługiwać pliki SVG QtWebKit zestaw klas pozwalający wyświetlać i edytować zawartość Internetu (np. stron WWW) QtXml klasy do obsługi plików XML QtXmlPatterns silnik do obsługi XQuery i XPath dla XML Phonon zestaw klas do obsługi multimediów Qt3Support klasy dostarczone w celu zachowania kompatybilności z Qt w wersji 3 Qt to także zestaw trzech narzędzi ułatwiających tworzenie aplikacji: Qt Designer narzędzie do projektowania graficznego interfejsu użytkownika Qt Assistant narzędzie pozwalające korzystać z pomocy dostarczonej z Qt, jak i tworzenia i prezentacji własnej dokumentacji Qt Linguist narzędzie pozwalające w łatwy sposób dostarczać różne wersje językowe własnych aplikacji Dzięki tak rozbudowanej bibliotece można stworzyć wiele różnych aplikacji. Dla przykładu może to być zintegrowane środowisko programistyczne, serwer działający w trybie tekstowym, aplikacja bazodanowa i wiele innych. W niniejszej pracy poruszamy się w zakresie modułów 1
QtCore i QtGui, gdzie podstawowymi zagadnieniami są widżety i layouty oraz architektura Model/Widok. Na uwagę zasługuje także system sygnałów i slotów. Dzięki nim możemy obsłużyć komunikację pomiędzy obiektami łącząc ich sygnały z odpowiednimi slotami. Gdy w kodzie aplikacji pojawi się instrukcja emitująca sygnał, to dane przesyłane tym sygnałem trafią do wszystkich slotów podłączonych do niego. Przykładem może być obsługa przycisku. Każde naciśnięcie przycisku sprawia, iż emituje on sygnał clicked(). Sygnał ten możemy połączyć ze slotem, czyli metodą klasy, np. obslugaprzycisku(), za pomocą metody connect(). W rezultacie każde naciśnięcie przycisku będzie skutkowało wywołaniem metody obslugaprzycisku(). 1.1. Widżety i layouty Widżety są to wszystkie elementy graficznego interfejsu użytkownika (GUI), takie jak okna, przyciski, paski postępu, suwaki i wiele innych. Layout także jest widżetem, który zajmuje się pozycjonowaniem, w sposób właściwy dla danego typu layoutu, innych widżetów umieszczonych w swoim wnętrzu. Layouty same w sobie nie mają reprezentacji graficznej, zarządzają jedynie reprezentacją zawartych w nich widżetów. Jednakże widżety nie składają się jedynie z elementów graficznych prezentowanych na ekranie monitora, lecz zapewniają przede wszystkim obsługę zdarzeń zachodzących w aplikacji, jak chociażby kliknięcie lewym przyciskiem myszy. Typowy przycisk emituje wtedy sygnał clicked() i zmienia swój wygląd na przycisk wciśnięty, natomiast pole edycyjne pozwala na edycję swojej zawartości, najczęściej od miejsca kliknięcia, co na ekranie ukazuje się najczęściej jako migający kursor. Każdy widżet w Qt jest pochodną klasy QWidget. Klasa ta zapewnia interfejs, składający się z szeregu metod, służących do kontrolowania graficznej reprezentacji widżetu, jak i obsługi przez niego zdarzeń. W Qt istnieją cztery zasadnicze typy layoutów: poziome (ang. horizontal) zapełniają swoją przestrzeń widżetami, ustawiając je w kolumnie, zaczynając od góry; pionowe (ang. vertical) zapełniają swoją przestrzeń widżetami, ustawiając je w wierszu, zaczynając od prawej strony; kratki (ang. grid) zapełniają swoją przestrzeń widżetami, ustawiąjąc je w kolejnych polach kratki składającej sie z zadanych ilości kolumn i wierszy; stosu (ang. stack) ustawiają widżety jeden na drugim tak, że w danej chwili widoczny jest tylko jeden i zapełnia on całą powierzchnię layoutu; Ponieważ layouty także są pochodną klasy QWidget, można je zagnieżdżać. Dla przykładu gdy w layout pionowy wstawimy dwa layouty poziome, w każdym po dwa przyciski, uzyskany efekt będzie taki sam lub podobny, jak w przypadku użycia layoutu kratki o dwóch kolumnach i dwóch wierszach oraz z wstawionymi czterema przyciskami. 1.2. Architektura Model/Widok
2. Opis problemu 2.1. Co jest tematem niniejszej pracy? 2.2. Po co jest tworzone to rozwiazanie? 3
3. Zbadane możliwości rozwiazania problemu 3.1. Rozwiazanie pierwsze 3.2. Rozwiazanie drugie 3.3. Rozwiazanie trzecie 3.4. Rozwiazanie czwarte 4
4. Realizacja wybranego sposobu 4.1. ProxyModel 4.2. Zdarzenia 5