Qt, winapi,Borland C++ Builder. Jak się do siebie mają ?

0

Witam,
przerabiam właśnie kurs c++(niedługo skończę, miałem go na studiach i sobie przypominam). Aby pisać programy okienkowe znalazłem takie 3 "pomysły":
Qt
winapi
Borland C++ Builder

ale nie mogę znaleźć nigdzie porównania ich. Jak one się do siebie mają ? czy aby nauczyć sie np. Qt muszę prędzej ogarnąć winapi? Czy są one równoważne i mając pewną wiedzę można sobie wybrać jeden z w/w aby pisać programy obiektowe? Jaki ma największy potencjał? Są to biblioteki czy całe środowiska ? Z góry dziękuję za pomoc : )

4

Qt uber alles

3

zastanawiam sie, kiedy ludzie naucza sie googlowac... oby nigdy. Wieksza konkurencja bylaby na rynku

WinApi jak sama nazwa wskazuje jest to API do windowsa. Rzadko, bardzo rzadko pisze sie kontrolki w tym
Borland c++ to jest mieszanka pascala i C++. Do tego jest to stara technologia (cos slyszalem ze ostatnio wznowili prace nad nowa wersja... ale watpie zeby ktos to uzywal...)
Qt jest frameworkiem ktory tak samo jak borland c++ implementuje ma swoje wrappery na winApi i daje Ci mozliwosc korzystania z niego w bardziej przystepny sposob. Ofert jezlei chodzi o "graficznego" c++ jest najwiecej wlasnie w Qt. Qt jest fajny

1
fasadin napisał(a):

Qt jest frameworkiem ktory tak samo jak borland c++ implementuje winApi i daje Ci mozliwosc korzystania z niego w bardziej przystepny sposob. Ofert jezlei chodzi o "graficznego" c++ jest najwiecej wlasnie w Qt. Qt jest fajny
Będę wredny i się przyczepię do tego słowa. Te biblioteki nie implementują WinAPI. Ono jest już zaimplementowane przecież w systemie. te biblioteki stanowią po prostu obudowę na WinAPI tak aby przyjemniej się z tego korzystało. Pod spodem i tak siedzą odwołania do funkcji z WinAPI.

Moim zdaniem warto znać WinAPI chociaż w podstawowym stopniu. Okazuje się że biblioteki nie są doskonałe i czasem trzeba zastosować jakieś rozwiązanie bezpośrednio w API systemowym, bo inaczej się nie da. Jednak nauka VCL/.Net/Qt nie przyniesie jakichś korzyści przy nauce WinAPI. Prędzej powiedziałbym, że zanim nauczymy się zaawansowanych bibliotek warto poznać WinAPI i wiedzieć jaki kawał roboty odwala za nas biblioteka generując w oknie puste okno... ;)

2

WinAPI i tak jest potrzebne w różnych specjalistycznych przypadkach gdy to czego potrzebujemy nie jest opakowane przez Qt czy czego tam używamy.
Ale GUI pod WinAPI? Uważam że warto liznąć, okienka przestaną być tak magiczne jak się wydawały, i będziemy wiedzieli co te biblioteki w stylu Qt tak naprawdę opakowują.

warto poznać WinAPI i wiedzieć jaki kawał roboty odwala za nas biblioteka
Ludzie narzekają na WinAPI, ale jak się zastanowić jakie były jego założenia, to się okazuje że tak musi być..
Jest to dość niski poziom (względem Qt; wysoki względem jądra systemu) i wszystkie (czy też prawie wszystkie) kroki tworzenia okienka są potrzebne i czemuś służą.
API powstało na początku lat 80-tych (więc niektóre osobliwości wynikają z chęci drastycznego ograniczenia zużycia pamięci) z myślą o C (stąd brak klas) i z myślą o programiście który czyta dokumentację, a nie pisze na pałę jak mu IDE podpowiada z okazjonalnym góglaniem za gotowcem.
Zauważ że późniejsze komponenty systemu (jak DirectX i nowsze) już się programuje zupełnie inaczej - są klasy, interfejsy (w C++ prawdziwe, w C symulowane).

0

Czyli warto "liznac" WinApi żeby wiedzieć o co chodzi w qt ? http://cpp0x.pl/kursy/Kurs-WinAPI-C++/167 ten kurs bedzie dobry ?

0

Dziękuje, czyli po skończeniu kursu zacznę sie uczyć Qt
tutaj: https://pl.wikipedia.org/wiki/Qt
Wyczytałem że można tworzyć nim apki na androida, to prawda ?
Jest jakaś dobra książka/kurs po polsku dotyczący tego środowiska ?

0
fasadin napisał(a):

WinApi jak sama nazwa wskazuje jest to API do windowsa. Rzadko, bardzo rzadko pisze sie kontrolki w tym
Borland c++ to jest mieszanka pascala i C++. Do tego jest to stara technologia (cos slyszalem ze ostatnio wznowili prace nad nowa wersja... ale watpie zeby ktos to uzywal...)

Jakiego znowu paskala?

fasadin napisał(a):

Qt jest frameworkiem ktory tak samo jak borland c++ implementuje ma swoje wrappery na winApi i daje Ci mozliwosc korzystania z niego w bardziej przystepny sposob. Ofert jezlei chodzi o "graficznego" c++ jest najwiecej wlasnie w Qt. Qt jest fajny

Dla mnie to Qt to raczej szmelc - zbytnio to przeładowane...
dlatego nie robiłem w tym nigdy.
Podejrzewam że prędzej zrobiłbym swoje własne te 'wrappery', zamiast tracić czas na opanowywanie obcych... urojeń.

class TFile
{
open(...);
write(,,,)
read(pipi;
...
};

class TWindow ... class Tpita...

1 dzień roboty...

0

WinApi jest darmowe, ale trzeba się przy tym narobić jeśli chcesz zbudować coś bardziej złożonego niż okno "O programie".
Qt jest dostępne w wersji darmowej (LGPL) i komercyjnej, na kilka systemów operacyjnych. Jest wysokopoziomowe i łatwiejsze w użyciu.
C++ Builder to najwyższy poziom abstrakcji (budowanie aplikacji myszką), ale nie ma wersji darmowej. Obsługa innych systemów niż Windows jakaś tam jest. Kompilator ponoć taki sobie.

0
vpiotr napisał(a):

WinApi jest darmowe, ale trzeba się przy tym narobić jeśli chcesz zbudować coś bardziej złożonego niż okno "O programie".

Przestań bajki opowiadać.

Programowanie bezpośrednio w WinApi nie jest wcale bardziej czasochłonne od tych innych... alternatyw.
To tylko taki mit.

A zresztą w zaawansowanych aplikacjach i tak trzeba znać dość dobrze WinApi, bo wtedy już nie ma alternatyw. :)

0

Pamiętajcie że WinApi ogranicza tylko do programowania pod Windows poza tym wbrew temu co poprzednik napisał programowanie w WinApi jest jednak najbardziej czasochłonne z wymienionych (WinApi, Qt, C++Builder). Jeżeli ktoś chce się ograniczać do Windows to dobrze jest znać WinApi bo czasami bywa pomocne i niektóre problemy można rozwiązać wykorzystując te funkcje poza tym dobrze wiedzieć jak to działa "od środka" ale niekoniecznie to powinno być priorytetem. Qt jest bezpłatne nawet dla komercyjnych aplikacji i dlatego chyba to będzie najlepszy wybór, bo C++ Builder mimo tego co niektórzy piszą ja uważam że to całkiem niezłe środowisko ale cholernie drogie i na pewno minimum dlatego jest mało popularny (ktoś kto się uczył na czymś innym do tego darmowym i to nieźle opanował nie będzie widział potrzeby przesiadania się na to środowisko).

2
Azarien napisał(a):

Ludzie narzekają na WinAPI, ale jak się zastanowić jakie były jego założenia, to się okazuje że tak musi być..
Jest to dość niski poziom (względem Qt; wysoki względem jądra systemu) i wszystkie (czy też prawie wszystkie) kroki tworzenia okienka są potrzebne i czemuś służą.
API powstało na początku lat 80-tych (więc niektóre osobliwości wynikają z chęci drastycznego ograniczenia zużycia pamięci) z myślą o C (stąd brak klas) i z myślą o programiście który czyta dokumentację, a nie pisze na pałę jak mu IDE podpowiada z okazjonalnym góglaniem za gotowcem.
Zauważ że późniejsze komponenty systemu (jak DirectX i nowsze) już się programuje zupełnie inaczej - są klasy, interfejsy (w C++ prawdziwe, w C symulowane).
Dokładnie tak jest. Jednak moim zdaniem jeśli się pisze pod Windows warto wiedzieć to i owo. Ale i tak nie pisałbym dużej aplikacji w samym WinAPI. Jakaś drobna jednookienkowa appka może być, ale coś większego oczywiście, że lepiej sobie wyklikać w IDE okienko, a resztę dopisać nie martwiąc się o GUI. Co do wspomnianego DirectX, to jakoś szczególnie mi to nie szło. O wiele łatwiej mi było pisać w WinAPI...

szary ptak napisał(a):

Przestań bajki opowiadać.

Programowanie bezpośrednio w WinApi nie jest wcale bardziej czasochłonne od tych innych... alternatyw.
To tylko taki mit.

A zresztą w zaawansowanych aplikacjach i tak trzeba znać dość dobrze WinApi, bo wtedy już nie ma alternatyw. :)
Nie wiem skąd wziąłeś tą tezę, ale jest ona nieprawdziwa. W Builderze biorę New->Form i mam okno. Przeciągam z Palety kontrolki i w 5 minut mam okno ze wszystkimi kontrolkami bez pisania nawet 1 linijki kodu. Klikam na Button wybieram z Eventów OnClick i IDE samo tworzy mi zarys metody jaka ma się wykonać. Pytanie ile Ci to zajmie w czystym WinAPI, gdzie samo wyświetlenie okna to jest duży kawał kodu.

kAzek napisał(a):

Pamiętajcie że WinApi ogranicza tylko do programowania pod Windows poza tym wbrew temu co poprzednik napisał programowanie w WinApi jest jednak najbardziej czasochłonne z wymienionych (WinApi, Qt, C++Builder). Jeżeli ktoś chce się ograniczać do Windows to dobrze jest znać WinApi bo czasami bywa pomocne i niektóre problemy można rozwiązać wykorzystując te funkcje poza tym dobrze wiedzieć jak to działa "od środka" ale niekoniecznie to powinno być priorytetem. Qt jest bezpłatne nawet dla komercyjnych aplikacji i dlatego chyba to będzie najlepszy wybór, bo C++ Builder mimo tego co niektórzy piszą ja uważam że to całkiem niezłe środowisko ale cholernie drogie i na pewno minimum dlatego jest mało popularny (ktoś kto się uczył na czymś innym do tego darmowym i to nieźle opanował nie będzie widział potrzeby przesiadania się na to środowisko).
Osobiście interesuje mnie tylko Windows, więc C++ Builder mi bardzo odpowiada. Fakt, ze biblioteka VCL jest zaprojektowana koślawo (sama z siebie zakłada używanie zmiennych globalnych...) ale można tego uniknąć. Za to wygoda z jaką mogę utworzyć nawet skomplikowane GUI przeważa minusy. Niestety kiedyś próbowałem pisać w Qt i nie podoba mi się filozofia sygnałów/slotów. Wolę eventy/callbacki. Może dlatego, że zaczynałem pisać w czystym C, gdzie to było na porządku dziennym. Zaś Builder ma jedną zasadniczą wadę która była już tu wymieniona. Mianowicie ceny oraz polityka właściciela. Gdzie zamiast wydawać poprawki łatające bugi, to wydamy nową wersję za którą klient może zapłacić. Co więcej czasem dodają dodatkowe rzeczy np. do robienia raportów. Ale co z tego jak z wersji na wersję oprogramowanie bundled zmienia się? I albo przepisujemy wszystkie raporty na inną bibliotekę, albo kupujemy pełną wersję z poprzedniego Buildera.

0
Mr.YaHooo napisał(a):

Osobiście interesuje mnie tylko Windows, więc C++ Builder mi bardzo odpowiada.
Przecież ja napisałem że C++ Builder jest wieloplatformowy i do pełni szczęścia brakuje tylko Linuksa (aż dziwne bo kiedyś był Kylix).

Mr.YaHooo napisał(a):

Fakt, ze biblioteka VCL jest zaprojektowana koślawo (sama z siebie zakłada używanie zmiennych globalnych...) ale można tego uniknąć.
W obecnych wersjach przynajmniej trochę to porządkują.

Mr.YaHooo napisał(a):

Zaś Builder ma jedną zasadniczą wadę która była już tu wymieniona. Mianowicie ceny oraz polityka właściciela. Gdzie zamiast wydawać poprawki łatające bugi, to wydamy nową wersję za którą klient może zapłacić.
Co do ceny to się zgadzam zdecydowanie za wysoka ale nieprawdą jest że nie wydaja poprawek tylko nowe wersje, bo są też wydawane naprawiające błędy aktualizacje oto lista aktualizacji do poprzedniej wersji (XE8) http://edn.embarcadero.com/article/44470

0
kAzek napisał(a):

Przecież ja napisałem że C++ Builder jest wieloplatformowy i do pełni szczęścia brakuje tylko Linuksa (aż dziwne bo kiedyś był Kylix).
Z tego co kojarzę to Kylix był takim niewypałem i z tego zrezygnowali.

Mr.YaHooo napisał(a):

W obecnych wersjach przynajmniej trochę to porządkują.
I bardzo dobrze, szkoda że każą sobie płacić taką kasę za nowe wersje.

Mr.YaHooo napisał(a):

Co do ceny to się zgadzam zdecydowanie za wysoka ale nieprawdą jest że nie wydaja poprawek tylko nowe wersje, bo są też wydawane naprawiające błędy aktualizacje oto lista aktualizacji do poprzedniej wersji (XE8) http://edn.embarcadero.com/article/44470
Racja, że poprawiają. Jednak z tego co kojarzę, to są bugi zgłoszone ponad 10 lat temu i nikt z tym nic nie robi. Co więcej jaki jest sens wydawania 2 nowych wersji tego samego roku? Tak było już 3 ostatnie lata:

  • 2013 XE4/XE5
  • 2014 XE6/XE7
  • 2015 XE8/10 Seattle

Zamiast robić coraz nowe wersje tego samego nie lepiej by było zrobić patcha? Rozumiem, że chcieli dodać obsługę Androida, ale mogli z tym poczekać do nowego roku. W międzyczasie mogli by poprawiać znane bugi i wydać patcha do starszej wersji.

0
Mr.YaHooo napisał(a):
kAzek napisał(a):

Przecież ja napisałem że C++ Builder jest wieloplatformowy i do pełni szczęścia brakuje tylko Linuksa (aż dziwne bo kiedyś był Kylix).
Z tego co kojarzę to Kylix był takim niewypałem i z tego zrezygnowali.

Tak był niewypałem ale chyba lepiej było spróbować ten niewypał poprawić niż rezygnować.

Mr.YaHooo napisał(a):
Mr.YaHooo napisał(a):

W obecnych wersjach przynajmniej trochę to porządkują.
I bardzo dobrze, szkoda że każą sobie płacić taką kasę za nowe wersje.
No tak ale przecież każda nowa wersja to nie tylko poprawki RTL i VLC ale i różne nowości i ulepszenia do środowiska.

Mr.YaHooo napisał(a):
Mr.YaHooo napisał(a):

Co do ceny to się zgadzam zdecydowanie za wysoka ale nieprawdą jest że nie wydaja poprawek tylko nowe wersje, bo są też wydawane naprawiające błędy aktualizacje oto lista aktualizacji do poprzedniej wersji (XE8) http://edn.embarcadero.com/article/44470
Racja, że poprawiają. Jednak z tego co kojarzę, to są bugi zgłoszone ponad 10 lat temu i nikt z tym nic nie robi. Co więcej jaki jest sens wydawania 2 nowych wersji tego samego roku? Tak było już 3 ostatnie lata:

  • 2013 XE4/XE5
  • 2014 XE6/XE7
  • 2015 XE8/10 Seattle

Zamiast robić coraz nowe wersje tego samego nie lepiej by było zrobić patcha? Rozumiem, że chcieli dodać obsługę Androida, ale mogli z tym poczekać do nowego roku. W międzyczasie mogli by poprawiać znane bugi i wydać patcha do starszej wersji.
Akurat obsługa Androida jak dobrze pamiętam jest jest od XE5, myślę że powodem wprowadzenia nowej wersji w tym roku było to aby był w pełni zgodny z Windows 10. Przynajmniej taki wniosek mi się nasuwa po http://www.embarcadero.com/products/cbuilder/whats-new a z tym czekanie do przyszłego roku raczej nie byłoby dobrym pomysłem.

0
Mr.YaHooo napisał(a):

W Builderze biorę New->Form i mam okno. Przeciągam z Palety kontrolki i w 5 minut mam okno ze wszystkimi kontrolkami bez pisania nawet 1 linijki kodu. Klikam na Button wybieram z Eventów OnClick i IDE samo tworzy mi zarys metody jaka ma się wykonać. Pytanie ile Ci to zajmie w czystym WinAPI, gdzie samo wyświetlenie okna to jest duży kawał kodu.

Ano akurat ten detal, praktycznie nic mi nie zajmuje, ponieważ używam zaawansowanej metody: copy-paste. :)

Po prostu: masz w tym przypadku kawałek kodu, który jest tylko powielany.
A i łatwo można sobie tu zrobić obiekt, a wtedy nawet i kopiować nie musisz.

Obsługę - rozrzut tych eventów też piszesz w kilka sekund...
same procedury, te eventy, są tu istotne, i takie same w obu wersjach,
zatem nic tego nie zautomatyzuje - tak czy siak musisz to wklepać ręcznie!

0

Jest może jakaś statystyka ( tak jak jest najpopularniejszego języka programowania), gdzie przedstawiony jest Qt i Builder c++ ( chodzi o szanse znalezienia pracy, wiadomo im bardziej popularny tym więcej firm z niego korzysta ). ? Chyba wybiorę Qt bo jest darmowy i ludzie chwalą jego dokumentacje ale czy w Qt można napisać aplikacje na androida ?

1
kAzek napisał(a):

Tak był niewypałem ale chyba lepiej było spróbować ten niewypał poprawić niż rezygnować.
Też jestem tego zdania. Ale na to niestety nie mamy wpływu.

Mr.YaHooo napisał(a):

No tak ale przecież każda nowa wersja to nie tylko poprawki RTL i VLC ale i różne nowości i ulepszenia do środowiska.
Niby tak, ale chyba Embarcadero wydaje nowe wersje chyba najczęściej na rynku?

Mr.YaHooo napisał(a):

Akurat obsługa Androida jak dobrze pamiętam jest jest od XE5, myślę że powodem wprowadzenia nowej wersji w tym roku było to aby był w pełni zgodny z Windows 10. Przynajmniej taki wniosek mi się nasuwa po http://www.embarcadero.com/products/cbuilder/whats-new a z tym czekanie do przyszłego roku raczej nie byłoby dobrym pomysłem.
Tak, pewnie taki był powód wydania kolejnej wersji. Jednak nie ulega wątpliwości, że takie postępowanie jest odbierane dość negatywnie.

szary ptak napisał(a):

Ano akurat ten detal, praktycznie nic mi nie zajmuje, ponieważ używam zaawansowanej metody: copy-paste. :)

Po prostu: masz w tym przypadku kawałek kodu, który jest tylko powielany.
A i łatwo można sobie tu zrobić obiekt, a wtedy nawet i kopiować nie musisz.

Obsługę - rozrzut tych eventów też piszesz w kilka sekund...
same procedury, te eventy, są tu istotne, i takie same w obu wersjach,
zatem nic tego nie zautomatyzuje - tak czy siak musisz to wklepać ręcznie!
Błagam, na forum programistycznym nic nie mów o metodzie copy-paste, bo za coś takiego powinni odbierać dostęp do komputera do końca życia. Oczywiście, że automatyzuje mi pisanie eventów. W WinAPI muszę sam pisać procedurę obsługi komunikatów okna i wywoływać odpowiednie funkcje. Tu IDE generuje ten kod samo. Co więcej generuje szkielet funkcji np. OnClick. Ja tylko wypełniam środek funkcji. A i tak zazwyczaj to jest wywołanie jakiejś metody z innego obiektu gdzie jest zawarta logika aplikacji.

Joker1309 napisał(a):

Jest może jakaś statystyka ( tak jak jest najpopularniejszego języka programowania), gdzie przedstawiony jest Qt i Builder c++ ( chodzi o szanse znalezienia pracy, wiadomo im bardziej popularny tym więcej firm z niego korzysta ). ? Chyba wybiorę Qt bo jest darmowy i ludzie chwalą jego dokumentacje ale czy w Qt można napisać aplikacje na androida ?
Wystarczy, że popatrzysz na ogłoszenia o pracę. Zobacz jaki odsetek ma Qt, a jaki Builder i będziesz miał sprawę jasną. Ogólnie to mam wrażenie, że do nowych projektów nie używa się c++ Buildera. Co do Androida i Qt, to z tego co wiem, to można pisać takie appki.

0

Skoro Ty pisanie programu nazywasz wypełnianiem,
mniemam że pomiędzy tymi takimi znaczkami: { i }, tak?

No to gratuluję... i trzymaj się nadal z dala od komputera. :)

0

Dziękuję za wszystkie rady, pobieram Qt i będę szukał jakiegos kursu/książki o Qt (pobieram 5 wersje), czy mogę korzystać z kursu z np. 2 wersji ?

0

@Joker1309 ja bym szukał kursu/książki o najnowszej wersji.

0

@Joker1309 z tego co się orientuję to na oficjalnej wiki qt są podana książki do wersji 5 i 4. Więcej książek jest(po polsku też)jednak z wersji 4. Na samej stronie są też przykłady prostych aplikacji, podłączenie do bazy danych i takie tam, warto to sobie pooglądać, jeśli umiesz c++ to to + dokumentacja tak naprawdę wystarczą moim zdaniem. Na wiki qt jest wszystko co ci potrzebne do startu.

0

Mam problem z zrozumieniem jak ten problem działa jeżeli chodzi o połączenie kodu z projektem wizualnym, jak w trybie design coś stworzę i np. przycisk i tekst, to w trybie edycji tego nie widzę, coś na pewno robię źle bo nie wieże że kod=/=design : |. Przykładowo mam 2 widgety : przycisk i tekst. Chcę zrobić żeby po naduszeniu tekst się zmienił. Czyli według powinno być tak:

void MainWindow::on_pushButton_clicked()
{
label.setText("2");
}

ale nie chce się skompilować bo nie widzi "label", mimo że jest on w trybie design : |

0

Na ślepo, bez sprawdzania, więc może być źle:).

 
void MainWindow::on_pushButton_clicked()
{
    ui->label->setText(QString("2"));
}

Przy użyciu widgetów które będą znajdować się w twoim MainWindow, praktycznie zawsze będziesz dodawać "ui".

0

Działą dziękuje : )

1 użytkowników online, w tym zalogowanych: 0, gości: 1