Wpis z mikrobloga

#programowanie #cpp #qt

Tak się zastanawiam. Po co ktoś miałby robić cokolwiek w C++ nie używając bibliotek Qt? Programujemy z kolegą w Qt od nooo, kilku dobrych miesięcy już. Nie mniej niż 3 na pewno. No i przyznam się szczerze, że ja po prostu innej drogi w C++ niż Qt to po prostu nie widzę. Nie mam pojęcia czemu miałbym nie używać Qt, nawet jeśli tylko używając niektórych elementów.

1. Licencja LGPL, czyli jak tylko nie robimy jakichś naprawdę cudackich rzeczy to jest full yolo.
2. Qt ma obecnie rozwiązanie dla prawie wszystkich podstawowych rzeczy jakie tylko w C++ można zrobić, cały mechanizm signal/slots, banalne wątkowanie, GUI itd.
3. W testach pojemników, które robiliśmy na nasze własne potrzeby programistyczne - QVector z Qt 5.6 zaorał std::vector i zaorał wydajnościowo właściwie każdy dostępny pojemnik zarówno Qt jak i std, tak tylko jako przykład podaję.
4. Qt jest multiplatformowe, kompilujesz jak chcesz i gdzie chcesz (no std w sumie też).
5. Qt ma najlepszą dokumentację jaka istnieje chyba.
6. Nawet jak coś z Qt jest do d--y, to przecież można zastosować odpowiednik std, albo dziedziczyć i zrobić po swojemu, albo skorzystać w ogóle z jakiejś zupełnie innej biblioteki w tym miejscu - wszak to nadal C++.

I to nie jest tak, że ja tu marketing "all hail Qt" uprawiam. Po prostu używam tych bibliotek od kilku dobrych miesięcy i kod jest jak na C++ prosty jak konstrukcja cepa, a działa szybko, dobrze i nie żre pamięci RAM więcej niż może 10-20% ponad gołego C++ z std.

Aczkolwiek mam pewne mankamenty co do Qt, bo np. QTableView pozostawia trochę do życzenia w kwestii szybkości działania (prawdopodobnie QPainter czy jakieś inne narzędzie do rysowania wnętrz komórek daje d--y wydajnościowo).

Więc pytam się teraz z ciekawości po prostu - można żyć bez Qt, ale po co?
  • 31
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@M4ks: Bo C++ jest szybki? My piszemy w C++, bo mamy wyciągnąć z tego tyle wydajności ile tylko się da. Nie po trupach, czyli C albo gołe std, bo to ma być czytelne dla innych ludzi także... no ale Java by tutaj wypadła raczej licho z racji samej wirtualnej maszyny.
  • Odpowiedz
@M4ks: Chyba jasno napisałem, że chcemy wydajności ale przy zachowaniu czytelności i nie po trupach?

@ponton: Noooo, a w C++ nie da się zrobić prawie wszystkiego? Ponadto ja mówię o C++ gołym vs C++ wspomagany jakoś Qtem, niekoniecznie bazowany na nim całkowicie. Nie mówimy o C vs C++ czy C++ vs Java. Mówimy o C++ std vs C++ Qt + std. Wszak std mamy zawsze.

@Vetinari:
  • Odpowiedz
@Khaine: Bo Qt wcale nie jest takie super, nie jest ani szybsze niż stl/boost, wymaga swojej notacji (QObject) i wymaga, uwaga, bibiliotek Qt. Ile zajmują portable biblioteki Qt?
  • Odpowiedz
@Khaine: C++ w porównaniu z Java czy C# to belkot. A zwłaszcza w wersji z Qt. Wiec gdzie jest granica czytelności przy zachowaniu wydajności?
Czy wydajność javy mierzyles tak jak wydajność qvecror vs std? Czyli tak jak 99 programistów? ;)
  • Odpowiedz
na PC, to co nas 1 mb obchodzi


@Khaine: Dopiero teraz wspominasz o PC. Jak tak to co nas obchodzi te 0.5 sekundy wolniej przy c# czy javie?

Na PC to nie potrzebujesz
  • Odpowiedz
@Trytka: Java byłaby dużo wolniejsza w przetwarzaniu. A potencjalnie może być bardzo dużo, bardzo ciężkich i wielowątkowych obliczeń. Takich co się będą liczyć przez kilka dni na bardzo szybkim kompie i to przy użyciu C++. Nie tyle nas boli zajętość pamięci, co szybkie działanie. No i czytelność kodu dla potrzeb rozbudowy w przyszłości.
  • Odpowiedz
bardzo dużo, bardzo ciężkich i wielowątkowych obliczeń.


@Khaine: nie robisz tego na PC.

ie tyle nas boli zajętość pamięci, co szybkie
  • Odpowiedz
@Khaine: Jak będziesz potrzebował napisać malutki moduł do istniejącego systemu, który nie używa Qt, to też będziesz ciągnął za sobą Qt i przekonywał innych, że jest Ci ono niezbędne, żeby Twój modulik działał?

Żeby się wtedy nie okazało, że bez Qt pod ręką będziesz miał problemy z napisaniem czegokolwiek ;)

Popieram zalety Qt, które opisałeś, ale nie popadaj w skrajność. C++ i STL znać warto i wszystko używać wedle potrzeb.
  • Odpowiedz
@Trytka: Oczywistym jest, że w krytycznych punktach programu używa się gołego C++ do samych obliczeń. Ale akurat można tam używać np. QVectorów albo std::vectorów i brać z nich wskaźnik na tablicę, która w nich siedzi za pomocą data().

@vipe: Zgadzam się, że Qt po prostu w obecnej sytuacji nam leży. Obliczeniożerne fragmenty kodu są napisane w gołym C++ lub tak zrobione aby korzystając z obiektów Qt były widziane
  • Odpowiedz