Jak poprawnie MVC w Qt?

Zakładając, że budowana prosta aplikacja w Qt będzie rozbudowywana w przyszłości zastanawiam się nad następującym problemem rozpoczęcia programu:

Czy kod logiczny aplikacji ma być implementowany w klasie dziedziczącej po QtCoreApplication lub QApplication, czy też należy przyjąć inne podejście? Widziane dotychczas przykłady są albo za proste i wywołują po prostu jakiś dialog z main(), albo klasę dziedziczącą z QDialog lub QWindow nazywają w stylu MyQApp, co jest dla mnie nieporozumieniem, gdyż okno nie stanowi aplikacji. Zwłaszcza w rozumieniu MVC.

Jakieś wskazówki do mądrego podejścia do problemu?

Aha, istotne jest, żeby z funkcjonalności klasy QCoreApplication skorzystać w kilku innych klasach, a nie tylko w funkcji main() - np. z obsługi parametrów wywołania. Jeżeli nie robić z tego na siłę singletonu, to co? Wszelkie globale odpadają.

  • W moich projektach zwykle tworzę podklasę QApplication, w której definiuję sobie metody inicjalizujące program typu loadTranslations() itp., a w konstruktorze ustawiam nazwę organizacji, programu i numer wersji. Dzięki temu funkcja main jest tak prosta jak tylko można - utworzenie obiektów aplikacji i głównego okna, wywołanie show() tegoż okna i przekazanie kontroli do pętli zdarzeń (BTW, jak sensowniej przetłumaczyć event loop?) aplikacji. Z MVC nie ma to wielkiego związku, jeśli szukasz tego wzorca w Qt, to raczej zerknij tu: Model/View programming.

    P.S. QCoreApplication i QApplication mają statyczną metodę instance(), więc nie musisz robić z tego singletona, bo już tam jest ;)

Zaloguj się, aby dodać swoją odpowiedź