Czy nauka języka C ++ w ramach Qt Naprawdę nauka języka C ++ [zamknięty]

32

Problem, który mam, polega na tym, że większość książek w C ++, które czytam, wydaje prawie zawsze na składnię i podstawy języka, np. forPętle while, tablice, listy, wskaźniki itp.

Ale nigdy nie wydają się budować niczego, co byłoby wystarczająco proste do nauki, a jednocześnie wystarczająco praktyczne, abyś zrozumiał filozofię i moc języka.

Potem natknąłem się na QT, która jest niesamowitą biblioteką!

Ale pracując nad demami, które mają, wydaje się, że jestem teraz w odwrotnym dylemacie. Czuję się jak syn bogatego człowieka jeżdżący samochodem sportowym subsydiowanym przez ojca. Jakbym mógł zbudować fantastyczne oprogramowanie, ale nie mam pojęcia, co się dzieje pod maską.

Jako przykład mojego dylematu postaw sobie zadanie zbudowania prostej przeglądarki internetowej. W czystym C ++ nie wiedziałbym nawet, od czego zacząć, ale z biblioteką Qt można to zrobić w ciągu kilku wierszy kodu.

Nie narzekam na to. Zastanawiam się tylko, jak wypełnić lukę w wiedzy między podstawową strukturą języka a interfejsem wysokiego poziomu, który zapewnia struktura Qt?

użytkownik866190
źródło
Nie znam programowania w Qt. Czy to rzeczywiście wprowadza nową składnię lub zmienia język, czy może to tylko bardzo wyrafinowane biblioteki?
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner To nie jest QT Framework GUI qt.nokia.com, jeśli jesteś zainteresowany
Karlson
Qt oferuje również alternatywę dla standardowych klas i kontenerów (np. QString, QList itd.) Oraz wiele innych udogodnień. Niektóre z nich są jeszcze bardziej intuicyjne niż standardowe. Myślę, że to miłe środowisko programistyczne, ale radziłbym osobno uczyć się podstawowego języka C ++.
Giorgio
3
Jeśli chcesz się dowiedzieć, jak implementowana jest Qt, po prostu pobierz i spójrz na jej kod źródłowy.
user16764
1
@Karlson Qt dodaje pewne rzeczy do języka, stąd potrzeba kompilatora moc aka metaobject. To dodaje refleksji i stanowi podstawę systemu sygnałów / gniazd Qt.
Tamás Szelei

Odpowiedzi:

11

Czy chcesz wiedzieć, jak naciśnięcie pedału przyspieszenia przyspiesza bolid, czy zależy Ci tylko na tym, że naciśnięcie pedału przyspiesza bolid?

Widzisz zalety programowania czarnej skrzynki, która jest świetnym sposobem na zaprojektowanie systemu, gdy wszystkie skrzynki działają. Ktoś musi zrobić czarne skrzynki, a jeśli chcesz być tym facetem / dziewczyną, musisz wiedzieć więcej o języku niż facet korzystający z pudełka.

Są prace, które są dobre w każdym stylu, więc to od Ciebie zależy, co chcesz zaprogramować. IMO zrobiłbyś sobie krzywdę, gdybyś jednak nie podjął wysiłku, aby oderwać trochę abstrakcji, którą QT w końcu ci daje.

Ryathal
źródło
2
„IMO wyrządziłbyś sobie krzywdę, gdybyś jednak nie podjął wysiłku, aby pozbyć się abstrakcji, którą QT w końcu ci daje”. Masz rację i mam przeczucie, że mam
user866190
18

Największą szkodę, jaką sobie wyrządzisz, jeśli chcesz to tak ująć, jest to, że nie nauczysz się korzystać ze standardowych struktur danych, iteratorów, algorytmów i ciągów C ++. Qt ma własne biblioteki do wszystkich tych celów i wszyscy jesteście zmuszeni do korzystania z nich zamiast standardowych encji C ++, ponieważ API Qt akceptują tylko własne struktury danych.

Można argumentować, że nauka korzystania z jednej biblioteki algorytmów po opanowaniu drugiej jest trywialnym zadaniem. Przed pójściem na rozmowę kwalifikacyjną, w której ankieterzy oczekują opanowania C ++, upewnij się, że wcześniej poradziłeś sobie z tą banalnością.

otto
źródło
3
Uzgodnione - Qt używa zupełnie innego zestawu narzędzi niż Standard C ++.
DeadMG,
W naszej firmie trwała długa debata na temat tego, czy należy używać standardowych kontenerów i iteratorów, czy Qt, i nie znaleźliśmy jeszcze rozwiązania: skończyliśmy na obu, chociaż nie łączymy dwóch stylów w jeden dany moduł. Mam wrażenie, że przejście z Qt do standardu jest koncepcyjnie bardzo łatwe, nawet jeśli zajmie to trochę czasu.
Giorgio
9
Używam standardowych kontenerów i algorytmów w moich modelach inżynierskich - tj. Mojej logice biznesowej. Używam pojemników Qt wewnątrz mojego kodu GUI. W ten sposób moje modele inżynieryjne są chronione przed zmianami w Qt i odwrotnie. Qt ma sposoby łączenia standardowych kontenerów i ich kontenerów.
emsr
2
I tak nie dbam o pojemniki. Nie są najbardziej użyteczną częścią STL; algorytmy są znacznie ważniejsze. Ze względu na konstrukcję STL, jego algorytmy mogą łatwo współpracować z innymi kontenerami, a kontenery Qt są zaprojektowane do pracy z algorytmami STL. Win-win, naprawdę.
MSalters
12

Biorąc pod uwagę, że Qt ma swój własny meta-kompilator, z którym musisz przetwarzać pliki źródłowe, trudno uznać kod Qt za „po prostu C ++”.

Ale co ważniejsze, styl C ++, którego używa i zachęca Qt, jest czymś, co dla reszty z nas było ostatnio widoczne około 1995 roku.

Naprawdę jest to próba uczynienia C ++ jak najbardziej podobnym do Java. Pomija lub zniechęca do wszystkich niesamowitych rzeczy, które sprawiają, że C ++ jest dziś warte użycia . Zamiast tego jesteś zamknięty w podzbiorze, który przede wszystkim wydaje się gorszej Java.

Więc jeśli celem jest nauka języka C ++, powiedziałbym, że nie, trzymaj się z dala od Qt. Być może rzuć okiem na Boost, jeśli chcesz użyć ustalonej biblioteki jako punktu wyjścia. Wzmocnienie ucieleśnia praktyki uważane dziś za dobre .

Ale szczerze mówiąc, jeśli chcesz nauczyć się języka C ++ , wybierz dobry podręcznik i skoncentruj się na języku .

Pisanie przeglądarki internetowej, bez względu na to, jak to zrobisz, w najlepszym przypadku nauczy Cię o przeglądarkach internetowych. Nie nauczy Cię wiele o używanym języku.

C ++ jako język nie ma wbudowanej klasy WebBrowser. Jeśli czytasz standard C ++, nic nie mówi o przeglądarkach. Nie wspomina nawet o aplikacjach GUI.

Dzieje się tak, ponieważ te rzeczy są zbudowane na wierzchu, dostarczane przez biblioteki takie jak Qt. C ++, jak każdy język programowania, dotyczy logiki i sposobu jej wyrażania. I tak, to oznacza pracę z tablicami, wskaźnikami, pętlami i wszystkimi innymi rzeczami.

Czy byłbyś w stanie napisać przeglądarkę internetową przy użyciu tych wbudowanych narzędzi, mając wystarczająco dużo czasu ? Czy wiesz, jak wyrazić logikę programu? Jeśli nie, musisz poświęcić więcej czasu na pętle i wskaźniki, a mniej na dzwonienie new QWebKit()i po prostu kupowanie gotowych bibliotek.

„Filozofia i potęga języka” dotyczy tablic, list i pętli, a nie przeglądarek internetowych.

jalf
źródło
4
Nigdy nie mówiłem, że są lepsi, ponieważ są nowi . Są nowe i są lepsze. Chodzi o to, że C ++ jako język po prostu nie jest zbyt dobrze przystosowany do tego podejścia podobnego do Java. W C ++ dziedziczenie i polimorfizm środowiska wykonawczego jest uciążliwe, ponieważ praktycznie wymaga od użytkownika alokacji obiektów w całym miejscu, dzięki czemu język zyskał reputację przecieków pamięci, ponieważ jest podatny na błędy krojenia, ponieważ utrudnia to kopiowanie obiektów. Jest także nieefektywny, mniej rozbudowalny i wymaga bardziej żmudnego kodu na płycie głównej.
czerwiec
2
Do cholery, Qt potrzebuje własnego meta-kompilatora, aby styl programowania był możliwy do wytrzymania . Czy to ci nie mówi?
czerwiec
4
Sam w sobie nie broniłem Qt (sam widzę w tym wiele ograniczeń). Twoje stwierdzenie „styl C ++, którego używa i zachęca Qt, jest czymś, co dla reszty z nas ostatnio widziano około 1995 r.” Dzięki temu sformułowaniu nie jest jasne, co jest złego w tym stylu (inne, że ma 15 lat) i jakie są obecne, lepsze alternatywy. Może, jeśli jesteś bardziej konkretny, to co masz na myśli, stanie się jaśniejsze.
Giorgio
3
@JimInTexas: poprzedza także C ++. Twój punkt? Na początku połowy lat 90. C ++ była zupełnie inną bestią. Było znacznie bliżej tego, co ostatecznie stało się Javą, niż jest dzisiaj.
czerwiec
3
@JimInTexas: Tak, to źle, ale mam nadzieję, że powinno być całkiem jasne, co mam na myśli. Jest to próba osiągnięcia celów projektowych Java w C ++. Jest to próba wdrożenia tego samego wadliwego modelu OOP, który implementuje Java.
czerwiec
9

Czy nauka języka C ++ poprzez Qt Framework Naprawdę nauka języka C ++

Może.

Musiałbym zobaczyć kod, który umieszczasz w modułach obsługi zdarzeń.

Naprawdę jednak, nie miej obsesji na punkcie tego, jak wiele „wiesz”. Wszyscy używamy struktur okienkowych i wciąż się uczymy. Po prostu koduj / czytaj nowe rzeczy, a będziesz kontynuować naukę C ++. Uczenie się nowego frameworka okien to świetny dodatek do twoich umiejętności, nawet jeśli nie oznacza to, że możesz zaimplementować sieć neuronową lub Quicksort w C ++.

Brian
źródło
5

Nie martw się; na początku większość twojego kodu będzie po prostu używać frameworka, ale po pewnym czasie będziesz musiał go rozszerzyć , nawet jeśli tylko trochę. Następnie będziesz musiał używać coraz więcej C ++.

Pamiętaj również, że masz dostępne całe źródło Qt, IDE z przyjemnością przeniesie Cię do definicji dowolnej funkcji / metody / klasy, którą chcesz. Im głębiej idziesz, tym więcej C ++ zobaczysz.

Inni wspominali o różnicy między Qt C ++ a standardowym C ++. Te należą do dwóch obozów:

  • inna biblioteka: Qt obejmuje wszystkie zwykłe kontenery: tablice, listy, zestawy, mapy skrótów itp. Pasują do siebie bardzo dobrze i są dobrymi implementacjami, ale nie są odmianą STD. Mimo to, w ostatnich wersjach (4.1 i późniejszych, myślę) mają one API podobne do STD oprócz starej odmiany (i API podobne do Java). Ostatecznie wybory projektowe (kiedy użyć tablicy, kiedy użyć mapy skrótów) są takie same, więc przejście na STD dla projektów nie będących Qt nie jest takie trudne.

  • mocdodatki do składni: głównie do obsługi sygnałów, ale także kilka ładniejszych konstrukcji pętli. Wiele osób uważa, że ​​to narzędzie oznacza, że ​​nie jest to już C ++; ale IMHO czują się jak nieco mądrzejsze makra. Dobra obsługa luźno sprzężonych sygnałów jest ogromną zaletą dobrego frameworka i jest to niezwykle trudne w statycznym języku. We współczesnym C ++ jest to wykonalne przy dużej dawce szablonów; ale to było dalekie od standardu, kiedy Qt pierwszy raz dostał moc. Na koniec, jeśli później chcesz wykonywać projekty inne niż Qt, najpierw sprawdź, czy będziesz używać dowolnego frameworka i czy ma on sygnały. Jeśli tak, to zastosowanie będzie miała większość tego, co zwykłeś robić z Qt, więc nie zaszkodzi w nauce Qt w pierwszej kolejności.

Javier
źródło
Jakie ulepszenia pętli daje moc?
Basile Starynkevitch
@Basile Starynkevitch: Może odnosi się do pętli foreach (której używam bardzo często). Jest to dodatek do składni, ale ASAIK, nie ma to nic wspólnego z moc. Masz więc rację, że być może odpowiedź powinna zostać sformułowana w inny sposób.
Giorgio
foreachto tylko makro .... (właściwie „alias” do Q_FOREACHzdefiniowania w <Qt/qglobal.h>). Nie sądzę, że mocto przetwarza. A C ++ 11 ma for (auto it : container)konstrukcję!
Basile Starynkevitch
@Basile Starynkevitch: Prawdopodobnie Qt potrzebowałby głębokiej przebudowy, gdyby musiał przejść do C ++ 11: Qt został zaprojektowany dla C ++ (i próbował również przezwyciężyć niektóre z jego ograniczeń), dlatego niektóre jego rozwiązania nie są potrzebne w C ++ 11.
Giorgio
1
Używam zarówno Qt, jak i Boost. Obie biblioteki nakładają się na siebie, ale Qt jest znacznie łatwiejszy do nauczenia się.
Jim In Texas
4

Qt jest szeroko stosowany w świecie komercyjnym, ponieważ zapewnia pełny zestaw narzędzi i środowisko programistyczne, w tym dobrą bibliotekę GUI.

W pełni obsługuje również internacjonalizację, w tym doskonałe narzędzie „Lingwista”.

Jeśli planujesz karierę akademicką, nie zawracałbym sobie głowy Qt. Jeśli natomiast lubisz C ++ i chcesz nauczyć się umiejętności rynkowej, warto nauczyć się Qt.

I tak, Qt to C ++, i możesz dodawać biblioteki standardowe i zwiększać zawartość bibliotek do swoich serc, jeśli dzięki temu poczujesz się lepiej.

Jim In Texas
źródło
3

Nauka C ++ poprzez Qt to zły pomysł. Najpierw musisz nauczyć się pojęć językowych niezależnych od jakiegokolwiek frameworku i tego właśnie nauczą Cię książki w C ++ i mają rację. Zasadniczo „for i pętle, tablice, listy, wskaźniki” to języki programowania. Dodatkowe funkcjonalności zapewniają frameworki. Gdy nauczysz się języka programowania, możesz nauczyć się dowolnego frameworku, takiego jak Qt lub MFC, który jest zbudowany przy użyciu tego języka, dzięki czemu aplikacje można szybko opracowywać. Jeśli chodzi o Qt, po opanowaniu języka c ++ jest to doskonała platforma, dzięki której jesteś tak produktywny, jak każdy programista Java lub .Net. Wkrótce będziesz mógł tworzyć aplikacje na iOS i Androida przy użyciu Qt.

Jaak
źródło
2

Cóż, myślę, że najlepszym sposobem na naukę C ++ jest TYLKO użycie własnej składni (Standard C ++), więc będziesz mógł korzystać z JĘZYKA, a NIE z Qt (lub jakichkolwiek innych frameworków, bibliotek ... itd.).

Czemu? ponieważ jako początkujący, kiedy spojrzysz na dowolny kod C ++ zmieszany z innym kodem innym niż C ++ (w tym przypadku Qt), nie będziesz w stanie zobaczyć, co jest C ++, a co nie, raczej będzie to bardziej złożony proces.

CVist
źródło