Jak zbudować graficzny interfejs użytkownika w C ++? [Zamknięte]

270

Wszystkie moje programy C ++ do tej pory korzystały z interfejsu wiersza poleceń, a jedynym innym językiem, z jakim mam doświadczenie, jest PHP, który nie obsługuje GUI.

Od czego zacząć od graficznego programowania interfejsu użytkownika w C ++? Jak mogę je utworzyć?

waiwai933
źródło
4
To zależy. Na jaki system operacyjny celujesz? Wiele ram GUI jest specyficznych dla systemu operacyjnego.
Michael Ratanapintha
3
Jaki system operacyjny / platforma? Lub, jeśli jesteś zainteresowany pisaniem wieloplatformowych aplikacji GUI, powiedz tak - te rzeczy mają ogromną różnicę dla C ++ ...
Shog9
3
PHP DOES obsługuje pisanie programów GUI. Nie ma powodu, dla którego nie można uruchamiać programów PHP z wiersza polecenia, a istnieją biblioteki GUI, takie jak PHP-GTK gtk.php.net i PHP-Qt php-qt.org, które mogą pomóc Możesz również ocenić, dlaczego potrzebujesz c ++. Pisanie GUI w c ++ jest trudniejsze niż w wielu innych językach i możesz być w stanie spakować swój kod c ++ w biblioteki, które można wywoływać z Python lub C # lub PHP lub coś nieco łatwiejszego do kodowania GUI.
kibibu
6
Twoje pytanie jest tak ogólne, że myślę, że nie chcesz tylko nazw zestawów narzędzi, a nawet niektórych samouczków. Chcesz książek , które dają więcej niż interfejsy API lub przykłady, które faktycznie dają ci pojęcia. KTC poleca niektóre z nich poniżej, ale sugerowałbym, bez względu na zestaw narzędzi, z którego wybierzesz grę, upewnij się, że znajdziesz też taki, o którym możesz przeczytać.
kwark
6
„Pisanie GUI w c ++ jest trudniejsze niż w wielu innych językach” Na czym opierasz to twierdzenie?
piotr

Odpowiedzi:

163

Zasadniczo system okienkowy systemu operacyjnego ujawnia niektóre wywołania API, które można wykonywać w celu wykonania zadań takich jak utworzenie okna lub umieszczenie przycisku w oknie. Zasadniczo otrzymujesz zestaw plików nagłówkowych i możesz wywoływać funkcje w tych zaimportowanych bibliotekach, tak jak zrobiłbyś to ze stdlib i printf.

Każdy system operacyjny ma własny zestaw narzędzi GUI, pakiet plików nagłówkowych i wywołań interfejsu API oraz własny sposób działania. Istnieją również zestawy narzędzi dla wielu platform, takie jak GTK , Qt i wxWidgets, które pomagają tworzyć programy działające w dowolnym miejscu. Osiągają to poprzez takie same wywołania API na każdej platformie, ale inną implementację dla tych funkcji API, które wywołują rodzime wywołania API OS.

Jedną wspólną cechą, która różni się od programu CLI, jest pętla zdarzeń. Podstawowa idea jest nieco skomplikowana i trudna do skompresowania, ale w gruncie rzeczy oznacza to, że w twojej głównej klasie / głównej funkcji nie dzieje się nic wielkiego, z wyjątkiem:

  • sprawdź kolejkę zdarzeń, czy są jakieś nowe zdarzenia
  • jeśli tak, wyślij te zdarzenia do odpowiednich procedur obsługi
  • kiedy skończysz, przywróć kontrolę wydajności do systemu operacyjnego (zwykle z jakimś specjalnym wywołaniem funkcji „uśpienia” lub „wybierz” lub „wydajność”)
  • wtedy funkcja fed powróci, gdy system operacyjny jest gotowy, a ty masz kolejną pętlę.

Istnieje wiele zasobów na temat programowania opartego na zdarzeniach. Jeśli masz jakiekolwiek doświadczenie z JavaScriptem, jest to ten sam podstawowy pomysł, z tym wyjątkiem, że ty, scripter, nie masz dostępu ani kontroli nad samą pętlą zdarzeń, ani jakie zdarzenia są, jedynym zadaniem jest pisanie i rejestrowanie programów obsługi.

Należy pamiętać, że programowanie GUI jest niezwykle skomplikowane i ogólnie trudne. Jeśli masz taką opcję, w rzeczywistości o wiele łatwiej jest po prostu zintegrować wbudowany serwer WWW z programem i mieć interfejs oparty na HTML / web. Jedynym wyjątkiem, z jakim się spotkałem, jest program Apple Cocoa + Xcode + konstruktor interfejsu + samouczki, które sprawiają, że jest to najłatwiej dostępne środowisko dla osób, które nie znały programowania GUI.

Bretoński
źródło
W rzeczywistości o wiele łatwiej jest po prostu zintegrować wbudowany serwer WWW z programem i mieć interfejs oparty na HTML / Web. ” To zależy. Jeśli chcesz robić fantazyjne rzeczy (złożony interfejs użytkownika, niestandardowe elementy sterujące, animacje itp.), Tak. Jeśli chcesz po prostu typowego GUI (ze zwykłymi kontrolkami i rodzimym uczuciem), nie.
Acorn
167

Istnieje wiele darmowych przenośnych bibliotek GUI , z których każda ma swoje mocne i słabe strony:

Zwłaszcza Qt ma fajne tutoriale i narzędzia, które pomogą ci zacząć. Cieszyć się!

Należy jednak pamiętać, że należy unikać funkcji specyficznych dla platformy, takich jak Win32 API lub MFC. To niepotrzebnie wiąże Cię na konkretnej platformie bez prawie żadnych korzyści.

vog
źródło
25
Osobiście uważam, że programowanie do Win32 API jest piękne. Lubię to bardziej niż używanie Qt, a samo w sobie jest zaletą. Może to tylko ja.
mrduclaw
6
Moje osobiste doświadczenie jest dokładnie odwrotne. Win32 API spowodował dla mnie więcej problemów niż jakikolwiek inny API.
vog
17
@mrduclaw, „Myślę, że programowanie do Win32 API jest piękne”. Próbuję za wszelką cenę napisać przenośny kod. (pamiętaj, że użyłem słowa „spróbuj”, ponieważ są wyjątki ...) Jak pisanie nieprzenośnego kodu jest uważane za „piękne”?
Trevor Boyd Smith
11
@Trevor Boyd Smith: Przypuszczam, że różne cele. Prawie żaden kod, który kiedykolwiek napisałem profesjonalnie, nie mógł być wieloplatformowy, więc nigdy mnie to nie martwiło.
mrduclaw
1
pytanie za milion dolarów jest takie, że faceci, którzy tworzą trenerzy gier, dostarczają tylko małe pliki exe, a ich programy mają piękny interfejs użytkownika, więc zastanawiam się, w jaki sposób budują interfejs, że nie dostarczają go tym bibliotekom stron trzecich?
user889030
74

Niezależny algorytm systemu operacyjnego „ Tworzenie aplikacji GUI w C ++ w trzech krokach ”:

  1. Zainstaluj Qt Creator

    wprowadź opis zdjęcia tutaj

  2. Utwórz nowy projekt (aplikacja Qt Widgets)

    wprowadź opis zdjęcia tutaj

  3. Zbuduj to.

Gratulacje, masz swój pierwszy GUI w C ++.

Teraz możesz przeczytać wiele dokumentacji, aby stworzyć coś bardziej skomplikowanego niż aplikacja GUI „Hello world”.

Kirill V. Lyadvinsky
źródło
W przeszłości miałem problemy z tym, że inne GUI nie były wystarczająco przyjazne dla początkujących. Ale Qt ma kilka świetnych samouczków. Dziękuję za rekomendację!
JD
23

Biorąc pod uwagę komentarz „powiedz Windows XP jako przykład”, masz następujące opcje:

  • Interakcja bezpośrednio z systemem operacyjnym poprzez interfejs API, który dla Microsoft Windows jest niespodzianką, zadzwoń do Windows API . Ostatecznym odniesieniem do WinAPI jest witryna MSDN firmy Microsoft . Popularnym samouczkiem dla początkujących online jest samouczek programowania interfejsu API Win32 . Klasyczną książką do tego jest Programowanie systemu Charlesa Petzolda , wydanie 5 .

  • Użyj biblioteki specyficznej dla platformy (zarówno pod względem systemu operacyjnego, jak i kompilatora), takiej jak MFC , która otacza WinAPI klasą C ++. Odniesieniem do tego jest ponownie MSDN. Klasyczną książką do tego jest Programowanie okien Jeffa Prosise'a z MFC, wydanie drugie . Jeśli używasz powiedzmy CodeGear C ++ Builder, wtedy opcją jest VCL .

  • Użyj biblioteki wieloplatformowej, takiej jak GTK + (opakowanie C ++: gtkmm ), Qt , wxWidgets lub FLTKktóre zawijają API konkretnego systemu operacyjnego. Zaletami tych programów jest to, że program można skompilować dla różnych systemów operacyjnych bez konieczności zmiany kodów źródłowych. Jak już wspomniano, każdy z nich ma swoje mocne i słabe strony. Jedną z kwestii przy wyborze, której użyć, jest licencja. W podanych przykładach GTK + & gtkmm jest licencją na licencji LGPL, Qt jest objęty różnymi licencjami, w tym zastrzeżoną opcją, wxWidgets ma własną licencję wxWindows (z nazwą na licencję wxWidgets), a FLTK jest objęty licencją LGPL. Aby uzyskać informacje, samouczek i książki, odwiedź witrynę każdego z nich, aby uzyskać szczegółowe informacje.

KTC
źródło
9
MFC jest złe. Wolałbym używać WIN API, gdybym nie miał innego wyboru.
the_drow
@the_drow Co z sourceforge.net/projects/win32-framework
Jerry Jeremiah
18

Ponieważ byłem już tam, gdzie teraz jesteś, myślę, że mogę ci „odpowiedzieć”.

Faktem jest, że nie ma łatwego sposobu na stworzenie GUI. GUI są wysoce zależne od kodu specyficznego dla platformy i systemu operacyjnego, dlatego powinieneś zacząć czytać dokumentację platformy docelowej / systemu operacyjnego na temat interfejsów API zarządzania oknami. Dobrą rzeczą jest: istnieje wiele bibliotek, które rozwiązują te ograniczenia i abstrakcyjne różnice w architekturze w jednym wieloplatformowym interfejsie API. Te sugerowane wcześniej, GTK i Qt, to niektóre z tych bibliotek.

Ale nawet te są nieco zbyt skomplikowane, ponieważ wprowadzono wiele nowych koncepcji, typów danych, przestrzeni nazw i klas jednocześnie. Z tego powodu używają one dołączone do edytora GUI WYSIWYG. W zasadzie umożliwiają oprogramowanie do programowania z GUI.

Podsumowując, istnieją również niewolne „środowiska” do programowania GUI, takie jak Visual Studio firmy Microsoft. Dla osób z doświadczeniem Delphi Visual Studio może być bardziej znane. Istnieją również bezpłatne alternatywy dla pełnego środowiska Visual Studio dostarczanego przez Microsoft: Visual Studio Express , który jest więcej niż wystarczający do rozpoczęcia tworzenia GUI.

Spidey
źródło
15

Znalazłem stronę internetową z „prostym” samouczkiem: http://www.winprog.org/tutorial/start.html

ZippyV
źródło
8
Wprowadza to Win32 API, bardzo niski poziom podejścia do programowania GUI, który wiąże cię z platformą Windows. Nie poleciłbym tego.
vog 27.07.2009
17
To ważna opcja. Zgadzam się, że może nie być to najlepsze miejsce na rozpoczęcie, ale nie zasługuje na głosowanie w dół.
Emil H
1
Wiem, że nie jest to idealne rozwiązanie, ale pomaga dowiedzieć się, jak działa system GUI w systemie Windows. Przeczytałem ten samouczek kilka lat temu i teraz wiem, czym jest pętla wiadomości i jak działa. Podczas pracy z WinForm w .net wiedza ta może się przydać.
ZippyV
7
Jeśli zamierzasz pisać aplikacje komputerowe, nic nie zastąpi wiedzy o tym, jak system operacyjny naprawdę renderuje i komunikuje się z użytkownikiem. Jeśli korzystasz z biblioteki bez zrozumienia podstaw, nigdy tak naprawdę nie zrozumiesz, co się dzieje. Nauczenie się trochę programowania GUI na niskim poziomie w Win32 będzie dobrym czasem.
Jim In Texas
@Jim W Teksasie: Zgadzam się, ale tego „trochę niskiego poziomu” należy nauczyć się po podstawach, więc nadal uważam to zalecenie za nieodpowiednie dla początkujących.
vog
3

Łatwo jest utworzyć interfejs GUI .NET dla systemu Windows w C ++.

Zobacz następujący samouczek MSDN . Możesz pobrać wszystko, czego potrzebujesz (Visual C ++ Express) za darmo .

Oczywiście przywiązujesz się do platformy .NET, ale jeśli tylko bawisz się lub potrzebujesz tylko aplikacji systemu Windows, nic ci nie będzie (większość ludzi wciąż ma system Windows ... na razie).

Justicle
źródło
3

Używam FLTK, ponieważ Qt nie jest darmowy. Nie wybieram wxWidgets , ponieważ mój pierwszy test z prostym Hello, World! program stworzył plik wykonywalny 24 MB, FLTK 0,8 MB ...

pernecker
źródło
4
Ze względu na zmiany licencji QT, planuję przejść na QT
pernecker
2
Mój własny program wxWidgets ma 5,9 Mb, nawet ze wszystkimi połączonymi bibliotekami w środku
msangel 30.01.2014