Nie powstrzymałbym się od używania Qt tylko z tych powodów. Nie musisz używać wszystkich klas użyteczności Qt; w przypadku tych, które zastępują STL, będziesz co najwyżej zmuszony do użycia QString i ewentualnie QStringList. Ponadto program zwykle zawiera znacznie więcej niż GUI. Zawsze możesz używać wyłącznie ogólnego C ++ do końca programu, a Qt tylko do GUI.
Moim zdaniem praca z STL polega raczej na zrozumieniu, jakie podstawowe struktury danych są używane i ich złożoności, a tym samym w jakich momentach powinieneś używać każdego kontenera. A jeśli chodzi o programowanie w C ++, chodzi przede wszystkim o umiejętność korzystania z bardzo niezbędnego nagłówka <algorytm>, który powinien również działać na kontenerach Qt, ponieważ są one kompatybilne z STL.
Nie widzę żadnej szkody w korzystaniu z tych wszystkich rozszerzeń, które zapewnia Qt, o ile wiesz (lub przynajmniej masz ogólne pojęcie o tym) jak są one implementowane wewnętrznie. Upewnij się, że wiesz, że rzeczy takie jak Q_OBJECT, SIGNAL (), SLOT (), foreach (), nie są magiczne, ale makra, które rozwijają się do prawidłowych instrukcji C ++. Na przykład zrozumienie, w jaki sposób niejawnie współużytkowane klasy i relacje rodzic-dziecko, które sprawiają, że Qt wydaje się bardziej podobne do Javy, nie jest wcale takie skomplikowane. Zawsze możesz spróbować odtworzyć niektóre funkcje w osobnym projekcie, aby sprawdzić, czy możesz to zrobić za pomocą ogólnego C ++, a następnie nie czuć się źle, używając ich w Qt.
Spójrz także na biblioteki Boost. Zapewniają dodatkowe narzędzia, których nie ma standardowa biblioteka C ++, i są naprawdę dobrym sposobem na zbliżenie się do ogólnego C ++, ponieważ zasadniczo przestrzegają tych samych konwencji, co ogólny C ++. Niektóre biblioteki mają dość złożone klasy szablonowe, a samo po prostu zrozumienie, w jaki sposób działają, jest samo w sobie dobrym studium w C ++. Wzmocnienie ma wiele narzędzi, których nie można znaleźć w Qt, a inne, które implementują takie same lub podobne pojęcia jak niektóre klasy Qt i mogą być używane zamiast nich.
Jeśli trafisz na rynek pracy, pracując z C ++, istnieje szansa, że będziesz pracować z Qt lub innym frameworkiem, który podobnie jak on, będzie miał własne klasy narzędzi, które starają się uprościć C ++.
Zgadzam się z większością pochwał Qt, ale pytanie brzmiało: Jaka jest najlepsza struktura GUI do użycia, która pozwala / wymaga największego wykorzystania ogólnego C ++ i STL? Pod tym względem Qt jest trochę schizofrenikiem: powiela kontenery STL i algorytmy własnymi zwrotami. Zapewnia również pojemniki, które różnią się od STL. Interoperacyjność między Qt i STL nie zawsze jest płynna. W niektórych przypadkach potrzeba kilku wywołań funkcji, aby dostać się
std::string
doQString
iz powrotem.wxWidgets ma opcję kompilacji STL, która wykorzystuje wyłącznie kontenery STL - nie ma równoległego wszechświata z domowymi zamiennikami, jak w przypadku Qt. Kompiluje również ze standardowym kompilatorem C ++ bez potrzeby niestandardowych rozszerzeń. Jest to wysokiej jakości platforma GUI, którą warto rozważyć.
Możesz także spojrzeć na gtkmm, który jest opakowaniem C ++ wokół GTK +. Jest bliżej spełnienia pierwszego wymagania niż Qt.
źródło
Nie martwiłbym się zbytnio o nieużywanie określonych bibliotek STL, takich jak std :: string lub std :: iostream lub std :: vector. Ekwiwalenty QT mają inny smak, ale nie są tak odległe, aby stanowić problem.
Moim zdaniem bardziej idiomatyczną różnicą wydaje się być styl programowania intensywnie wykorzystywany
new
do alokacji. Podczas gdy w przypadku programu QT może to być w porządku dla części Gui, zaletą C ++ i RAII jest to, że faktycznie można przechowywać wiele danych na stosie zamiast na stercie. Przechodząc do pisania kodu innego niż GUI, powinieneś to sobie przypomnieć.źródło
new/delete
połączeń nie jest to takie łatwe i podatne na błędy. W krytycznych sekcjach (obsługa dużych zbiorów danych) może to mieć znaczenie, szczególniedelete
połączenia mogą być dość powolne.