Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4 Piotr Małek – promotor mgr inż.

Podobne prezentacje


Prezentacja na temat: "Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4 Piotr Małek – promotor mgr inż."— Zapis prezentacji:

1 Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4 Piotr Małek – promotor mgr inż. Waldemar Grabski Filip Piechocki – promotor mgr inż. Michał Nowacki

2 Przesłanki do powstania pracy Wzrost znaczenia warstwy prezentacyjnej w współczesnych aplikacjach Powszechność użycia widoków Wygoda i uniwersalność architektury Model/Widok 2 Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

3 Architektura Model/Widok Model – interfejs dla danych Widok – obiekt ekranowy do prezentacji danych uzyskanych z modelu Delegat – wykorzystywany przez widok do wyświetlania i edycji pojedynczego elementu 3Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

4 Wymagania projektowe Zgodność z koncepcją architektury Model/Widok Uniwersalność (rozwiązanie musi działać dla dowolnych typów widżetów) Wydajność umożliwiająca wygodne działanie z ilością obiektów ekranowych rzędu kilkuset. 4Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

5 Próby rozwiązania Ręczna kontrola położenia widżetów w widoku Odrysowywanie widżetów Pseudo-widżety System meta-obiektów Rozwiązanie finalne 5Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

6 Ręczna kontrola położenia widżetów Pomysł Widżety ustawiane na widoku Realizacja W miejscu przeznaczonym przez widok dla reprezentacji danego elementu ustawiamy widżet Reagujemy na zdarzenia przewijania widoku i w zależności od tego przemieszczamy widżety na właściwe miejsce Wady i zalety + Bardzo proste w implementacji + Gotowa, natywna dla widżetów, obsługa zdarzeń + Rozwiązanie uniwersalne - Widżety nie są związane z widokiem - Słaba wydajność 6Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

7 Odrysowywanie widżetów Pomysł Widżet nie wysyłający zdarzeń mniej obciąża aplikację Odrysowywanie widżetu, zamiast jego pozycjonowania Realizacja Ustawienie setVisible(false) Użycie metody render() widżetu Wady i zalety + Widżet jest integralną częścią widoku + Rozwiązanie uniwersalne - Brak obsługi zdarzeń 7Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

8 Pseudo-widżety Pomysł Stworzyć dedykowane pseudo-widżety specjalnie na potrzeby projektu Realizacja Wykorzystanie klasy QStyle Wady i zalety + Wysoka wydajność - Brak obsługi zdarzeń - Trudne w implementacji - Obsługa tylko standardowych kontrolek 8Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

9 System meta-obiektów Pomysł Ograniczenie liczby widżetów do minimum Realizacja Wykorzystanie render() Tylko jeden prawdziwy widżet-wzorzec Odrysowanie widżetu, po uprzednim zainicjowaniu go wartościami przechowywanymi w modelu pośredniczącym Wady i zalety + Rozwiązanie uniwersalne - Bardzo wolne 9Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

10 Rozwiązanie finalne Ponownie odrysowywanie widżetów Qt::WA_DontShowOnScreen Model pośredniczący Zalety – dowolne widżety, animacje Wady – prawdziwe widżety, problemy z obsługą zdarzeń 10Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

11 Projekt Diagram klas 11Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

12 Klasy część 1 WoivAbstractWidgetWrapper Klasa opakowująca normalną kontrolkę Do zaimplementowania przez użytkownika Realizuje dwustronne połączenie danych modelu z odpowiadającymi im danymi odpowiednich kontrolek WoivAbstractWidgetFactory Fabryka widżetów, służących do reprezentacji danych modelu Zwraca obiekt pochodny do WoivAbstractWidgetWrapper Do samodzielnego zaimplementowania przez użytkownika 12Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

13 Klasy część 2 WoivAbstractProxyModel Klasa przechowująca dane do prezentacji indeksów modelu Powiązana bardziej z widokiem niż z modelem Odwzorowuje strukturę modelu i przechowuje w niej widżety służące do prezentacji 13Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

14 Klasy część 3 WoivController Przekazywanie zdarzeń z widoku do odpowiedniego widżetu Odrysowywanie widżetów w widoku 14Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

15 Projekt Architektura 15Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

16 Testowanie Napisanie prostej aplikacji wykorzystującej nasze rozwiązanie 16Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

17 Testowanie Użycie narzędzi callgrind i KCacheGrind do znalezienia wąskich gardeł i sprawdzania zmian wydajności po wprowadzeniu poprawek Wykorzystanie QTestLib do testowania wydajności wprowadzanych poprawek, np.: ********* Start testing of ProxyModelTest ********* Config: Using QTest library 4.5.2, Qt PASS : ProxyModelTest::initTestCase() RESULT : ProxyModelTest::indexTest():"One column 150": msec per iteration (total: 28, iterations: 1024) RESULT : ProxyModelTest::indexTest():"Two columns 2x75": msec per iteration (total: 30, iterations: 1024) RESULT : ProxyModelTest::indexTest():"One column 75+75": msec per iteration (total: 22, iterations: 512) PASS : ProxyModelTest::indexTest() PASS : ProxyModelTest::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped ********* Finished testing of ProxyModelTest ********* 17Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4

18 Podsumowanie Udało się znaleźć rozwiązanie spełniające wszystkie wymagania Problem systemów Windows – limit uchwytów do okien na proces Dla niektórych zastosowań jednak lepsze może być inne podejście Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4 18

19 Dziękujemy za uwagę. 19Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4


Pobierz ppt "Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4 Piotr Małek – promotor mgr inż."

Podobne prezentacje


Reklamy Google