1 / 18

Piotr Małek Filip Piechocki

Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4. Piotr Małek Filip Piechocki. Przesłanki do powstania pracy. Wzrost znaczenia warstwy prezentacyjnej w współczesnych aplikacjach Powszechność użycia widoków

mandek
Download Presentation

Piotr Małek Filip Piechocki

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Wykorzystanie mechanizmu delegata do emulacji struktury i zachowania widżetów w architekturze Model/Widok biblioteki Qt4 Piotr Małek Filip Piechocki

  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

  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

  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.

  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

  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ść

  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ń

  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

  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

  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ń

  11. 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

  12. 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

  13. Klasy część 3 • WoivController • Przekazywanie zdarzeń z widoku do odpowiedniego widżetu • Odrysowywanie widżetów w widoku

  14. Projekt • Diagram klas

  15. Projekt • Architektura

  16. Testowanie • Napisanie prostej aplikacji wykorzystującej nasze rozwiązanie

  17. Testowanie • Użycie narzędzi callgrindi KCacheGrinddo znalezienia „wąskich gardeł” i sprawdzania zmian wydajności po wprowadzeniu poprawek • Wykorzystanie QTestLib do testowania wydajności wprowadzanych poprawek

  18. Koniec • Prosimy o łatwe pytania !!!!!

More Related