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

Trudno powiedzieć, o co tu chodzi. To pytanie jest niejednoznaczne, niejasne, niekompletne, zbyt szerokie lub retoryczne i nie można racjonalnie odpowiedzieć w obecnej formie. Aby uzyskać pomoc w wyjaśnieniu tego pytania, aby można było je ponownie otworzyć, odwiedź Centrum pomocy . Zamknięty 9 lat temu .

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

Od czego zacząć programowanie graficznego interfejsu użytkownika w C++? Jak je utworzyć?

Author: Community, 2009-07-27

8 answers

Zasadniczo system okien systemu operacyjnego wyświetla niektóre wywołania API, które można wykonać, aby wykonać zadania, takie jak tworzenie okna lub umieszczenie przycisku na oknie. Zasadniczo otrzymujesz pakiet plików nagłówkowych i możesz wywoływać funkcje w tych zaimportowanych bibliotekach, tak samo jak w przypadku stdlib i printf.

Każdy system operacyjny ma własny zestaw narzędzi GUI, pakiet plików nagłówkowych i wywołań API oraz własny sposób działania. Istnieją również wieloplatformowe Zestawy narzędzi, takie jak GTK, Qt i wxWidgets , które pomagają budować programy, które działają w dowolnym miejscu. Osiągają to dzięki tym samym wywołaniom API na każdej platformie, ale innej implementacji dla tych funkcji API, które wywołują natywne wywołania API systemu operacyjnego.

Jedna rzecz, którą wszystkie będą miały ze sobą wspólnego, różniąca się od programu CLI, to coś, co nazywa się pętlą zdarzeń. Podstawowa idea jest nieco skomplikowana i trudna do skompresowania, ale w istocie oznacza to, że nie wiele się dzieje w Twojej głównej klasie/głównej funkcji, z wyjątkiem:

  • sprawdź kolejkę zdarzeń, jeśli są jakieś nowe zdarzenia
  • jeśli istnieje, wyślij te zdarzenia do odpowiednich opiekunów
  • Po zakończeniu, kontrola wydajności z powrotem do systemu operacyjnego (zwykle z jakimś specjalnym wywołaniem funkcji "sleep" lub "select" lub "yield")
  • wtedy funkcja yield powróci, gdy system operacyjny zostanie ukończony, a Ty będziesz miał inne wyjście pętla.

Istnieje wiele zasobów na temat programowania opartego na zdarzeniach. Jeśli masz jakieś doświadczenie z JavaScript, to ta sama podstawowa idea, z wyjątkiem tego, że ty, skrypter nie masz dostępu ani kontroli nad samą pętlą zdarzeń, lub jakie są zdarzenia, Twoim jedynym zadaniem jest pisanie i rejestrowanie programów obsługi.

Należy pamiętać, że programowanie GUI jest niezwykle skomplikowane i trudne, w ogóle. Jeśli masz taką opcję, o wiele łatwiej jest po prostu zintegrować wbudowany serwer WWW w program i interfejs oparty na HTML / www. Jedynym wyjątkiem, z którym się spotkałem, jest kakao Apple +Xcode + interface builder + samouczki, które sprawiają, że jest to łatwo najbardziej przystępne środowisko dla osób, które nie znają programowania GUI, jakie widziałem.

 189
Author: Breton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-28 19:20:50

Istnieje wiele darmowych przenośnych bibliotek GUI , każda z własnymi mocnymi i słabymi stronami:

Szczególnie Qt ma fajne samouczki i narzędzia, które pomogą Ci zacząć. Smacznego!

Uwaga, jednak, że należy unikać specyficznych dla platformy funkcji , takich jak Win32 API lub MFC. To niepotrzebnie wiąże cię z konkretną platformą bez prawie żadnych korzyści.

 181
Author: vog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-05 14:23:10

OS independent algorithm "Tworzenie aplikacji GUI W C++ w trzech krokach":

  1. Install Qt Creator

    Tutaj wpisz opis obrazka

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

    Tutaj wpisz opis obrazka

  3. Zbuduj go.

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

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

 77
Author: Kirill V. Lyadvinsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-28 17:54:24

Biorąc pod uwagę komentarz "powiedzmy Windows XP jako przykład", wtedy opcje są:

  • Interakcja bezpośrednio z systemem operacyjnym za pośrednictwem jego API, które dla Microsoft Windows jest wywołaniem niespodzianką Windows API . WinAPI jest jednym z najpopularniejszych WinAPI na świecie. Popularny samouczek dla początkujących jest Theforger ' s Win32 API Programming Tutorial. Klasyczna książka do tego jest Charles Petzold Programowanie Windows, 5th Wydanie .

  • Używaj specyficznej dla platformy (zarówno pod względem systemu operacyjnego, jak i kompilatora) biblioteki, takiej jak MFC, która zawija WinAPI do klasy C++. Punktem odniesienia dla tego jest ponownie MSDN. Klasyczną książką do tego jest Jeff Prosise ' s Programming Windows with MFC, 2nd Edition. Jeśli używasz say CodeGear C++ Builder, to opcją tutaj jest VCL.

  • Użyj wieloplatformowej biblioteki, takiej jak GTK+ (wrapper C++: gtkmm ), Qt, wxWidgets, lub FLTK, które zawijają określone API systemu operacyjnego. Korzyści z nich są takie, że ogólnie program może być skompilowany 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. Jednym z czynników przy wyborze, który z nich ma być używany, jest jego licencja. Dla podanych przykładów, GTK+ & gtkmm jest licencją na LGPL, Qt jest na różnych licencjach, w tym na własnościowych opcjach, wxWidgets jest objęty własną licencją wxWindows (ze zmianą nazwy na licencję wxWidgets), a FLTK jest objęte LGPL z wyjątkiem. Aby uzyskać informacje, samouczki i książki, odwiedź stronę internetową każdego z nich, aby uzyskać szczegółowe informacje.

 23
Author: KTC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-27 02:15:21

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

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

Ale nawet te są trochę zbyt skomplikowane, ponieważ wprowadzono wiele nowych pojęć, typów danych, przestrzeni nazw i klas naraz. Z tego powodu są one dostarczane w pakiecie z edytorem WYSIWYG GUI. Umożliwiają programowanie oprogramowania z GUI.

PodsumowujÄ ... c, sÄ ... rĂłwnieĹź niewolne " Ĺ "rodowiska" do tworzenia GUI, takie jak Visual Studio od Microsoftu. Dla tych z Delphi {[10] } doświadczenie, Visual Studio może być bardziej znane. Istnieją również bezpłatne alternatywy dla pełnego środowiska Visual Studio dostarczonego przez Microsoft: Visual Studio Express, co jest więcej niż wystarczające, aby rozpocząć rozwój GUI.

 19
Author: Spidey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-28 19:23:38

Znalazłem stronę z "prostym" tutorialem: http://www.winprog.org/tutorial/start.html

 15
Author: ZippyV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-27 01:14:45

Używam FLTK, ponieważ Qt nie jest wolne. Nie wybieram wxWidgets , ponieważ mój pierwszy test z prostym Witaj, świecie! program wyprodukował plik wykonywalny 24 MB, FLTK 0.8 MB...

 4
Author: pernecker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-28 19:27:01

Łatwo jest utworzyć interfejs graficzny. NET Windows w C++.

Zobacz poniższy samouczek z MSDN . Możesz pobrać wszystko, czego potrzebujesz (Visual C++ Express) dla za darmo .

Oczywiście przywiązujesz się do. NET, ale jeśli tylko się bawisz lub potrzebujesz tylko aplikacji Windows, wszystko będzie dobrze (większość ludzi nadal ma Windows...na razie).

 3
Author: Justicle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-28 19:24:48