Hoe bouw ik een grafische gebruikersinterface in C++? [gesloten]

Al mijn C++-programma’s hebben tot nu toe de opdrachtregelinterface gebruikt en de enige andere taal waarmee ik ervaring heb is PHP, die geen GUI’s ondersteunt.

Waar begin ik met het programmeren van grafische gebruikersinterfaces in C++? Hoe maak ik er een aan?


Antwoord 1, autoriteit 100%

In wezen onthult het venstersysteem van een besturingssysteem enkele API-aanroepen die u kunt uitvoeren om taken uit te voeren zoals het maken van een venster of het plaatsen van een knop op het venster. In principe krijg je een reeks header-bestanden en kun je functies aanroepen in die geïmporteerde bibliotheken, net zoals je zou doen met stdlib en printf.

Elk besturingssysteem wordt geleverd met zijn eigen GUI-toolkit, reeks header-bestanden en API-aanroepen, en hun eigen manier om dingen te doen. Er zijn ook cross-platform toolkits zoals GTK, Qt en wxWidgets waarmee u programma’s kunt bouwen die overal werken. Ze bereiken dit door op elk platform dezelfde API-aanroepen te hebben, maar een andere implementatie voor die API-functies die de native OS API-aanroepen aanroepen.

Eén ding dat ze allemaal gemeen hebben, wat anders zal zijn dan een CLI-programma, is iets dat een gebeurtenislus wordt genoemd. Het basisidee daar is enigszins gecompliceerd en moeilijk te comprimeren, maar in wezen betekent het dat er niet veel in je hoofdklasse/hoofdfunctie gaat, behalve:

  • controleer de evenementenwachtrij als er nieuwe evenementen zijn
  • indien aanwezig, stuur die gebeurtenissen dan naar de juiste afhandelaars
  • wanneer je klaar bent, geef je de controle terug aan het besturingssysteem (meestal met een speciale “slaap”- of “selecteer”- of “opbrengst”-functieaanroep)
  • dan keert de opbrengstfunctie terug als het besturingssysteem klaar is, en kun je nog een rondje maken.

Er zijn tal van bronnen over op gebeurtenissen gebaseerde programmering. Als je enige ervaring hebt met JavaScript, is het hetzelfde basisidee, behalve dat jij, de scripter, geen toegang of controle hebt over de gebeurtenislus zelf, of welke gebeurtenissen er zijn, je enige taak is om handlers te schrijven en te registreren.

Houd er rekening mee dat GUI-programmering over het algemeen ongelooflijk ingewikkeld en moeilijk is. Als je de mogelijkheid hebt, is het eigenlijk veel gemakkelijker om gewoon een embedded webserver in je programma te integreren en een HTML/webgebaseerde interface te hebben. De enige uitzondering die ik ben tegengekomen is Apple’s Cocoa + Xcode + interface builder + tutorials die het gemakkelijk de meest toegankelijke omgeving maken voor mensen die nieuw zijn in GUI-programmering die ik heb gezien.


Antwoord 2, autoriteit 92%

Er zijn tal van gratis draagbare GUI-bibliotheken, elk met zijn eigen sterke en zwakke punten:

Vooral Qt heeft leuke tutorials en tools die je op weg helpen. Geniet ervan!

Houd er echter rekening mee dat u platformspecifieke functionaliteit zoals de Win32 API of MFC moet vermijden. Dat bindt je onnodig vast aan een specifiek platform met bijna geen voordelen.


Antwoord 3, autoriteit 38%

OS-onafhankelijk algoritme “GUI-applicaties maken in C++ in drie stappen“:

  1. Installeer Qt Creator

    voer hier de afbeeldingsbeschrijving in

  2. Nieuw project maken (Qt Widgets-toepassing)

    voer hier de afbeeldingsbeschrijving in

  3. Bouw het.

Gefeliciteerd, je hebt je eerste GUI in C++.

Nu ben je klaar om veel documentatie te lezen om iets ingewikkelder te maken dan “Hallo wereld” GUI-toepassing.


Antwoord 4, autoriteit 12%

Gezien de opmerking “zeg Windows XP als voorbeeld”, dan zijn uw opties:

  • Reageer rechtstreeks met het besturingssysteem via de API, wat voor Microsoft Windows een verrassingsoproep is Windows API. De definitieve referentie voor de WinAPI is Microsoft’s MSDN-website . Een populaire online tutorial voor beginners hiervoor is theForger’s Win32 API Programming Tutorial. Het klassieke boek daarvoor is Charles Petzold’s Programming Windows, 5th Edition.

  • Gebruik een platform (zowel in termen van OS als compiler) specifieke bibliotheek zoals MFC, die de WinAPI verpakt in de C++-klasse. De referentie daarvoor is opnieuw MSDN. Een klassiek boek daarvoor is Jeff Prosise’s Programming Windows with MFC, 2nd Edition. Als je bijvoorbeeld CodeGear C++ Builder gebruikt, dan is de optie hier VCL.

  • Gebruik een platformonafhankelijke bibliotheek zoals GTK+ (C++-wrapper: gtkmm), Qt, wxWidgets of FLTK die de API van het specifieke besturingssysteem omsluiten. De voordelen hiervan zijn dat uw programma over het algemeen voor verschillende besturingssystemen kan worden gecompileerd zonder de broncodes te hoeven wijzigen. Zoals eerder vermeld, hebben ze elk hun eigen sterke en zwakke punten. Een overweging bij het selecteren van welke u wilt gebruiken, is de licentie. Voor de gegeven voorbeelden, GTK+ & gtkmm is een licentie onder LGPL, Qt valt onder verschillende licenties, waaronder een propriëtaire optie, wxWidgets valt onder zijn eigen wxWindows-licentie (met een hernoeming naar wxWidgets-licentie), en FLTK valt onder LGPL met uitzondering. Raadpleeg voor meer informatie over referenties, tutorials en/of boeken ieders website.


Antwoord 5, autoriteit 10%

Omdat ik al ben geweest waar jij nu bent, denk ik dat ik je kan “antwoorden”.

Feit is dat er geen gemakkelijke manier is om een ​​GUI te maken. GUI’s zijn sterk afhankelijk van platform- en OS-specifieke code, daarom zou u moeten beginnen met het lezen van uw doelplatform/OS-documentatie over vensterbeheer-API’s. Het goede is: er zijn tal van bibliotheken die deze beperkingen en abstracte architectuurverschillen aanpakken in een enkele API voor meerdere platforms. De eerder gesuggereerde, GTK en Qt, zijn enkele van deze bibliotheken.

Maar zelfs deze zijn een beetje te ingewikkeld, omdat er veel nieuwe concepten, gegevenstypen, naamruimten en klassen tegelijk worden geïntroduceerd. Om deze reden worden ze gebundeld met een GUI WYSIWYG-editor. Ze maken programmeersoftware met GUI’s vrijwel mogelijk.

Om het samen te vatten, er zijn ook niet-vrije “omgevingen” voor GUI-ontwikkeling, zoals Visual Studio van Microsoft. Voor degenen met Delphi ervaringsachtergronden, is Visual Studio misschien meer vertrouwd. Er zijn ook gratis alternatieven voor de volledige Visual Studio-omgeving die door Microsoft wordt geleverd: Visual Studio Express, dat is meer dan genoeg om te beginnen met GUI-ontwikkeling.


Antwoord 6, autoriteit 8%

Ik heb een website gevonden met een “eenvoudige” tutorial:
http://www.winprog.org/tutorial/start.html


Antwoord 7, autoriteit 2%

Ik gebruik FLTK omdat Qt niet gratis is. Ik kies niet voor wxWidgets, omdat mijn eerste test met een simpele Hello, World ! programma produceerde een uitvoerbaar bestand van 24 MB, FLTK 0,8 MB…


Antwoord 8, autoriteit 2%

Het is gemakkelijk om een ​​.NET Windows GUI te maken in C++.

Zie de volgende tutorial van MSDN. Je kunt alles wat je nodig hebt (Visual C++ Express) downloaden voor gratis.

Natuurlijk ben je gebonden aan .NET, maar als je gewoon wat aan het spelen bent of alleen een Windows-applicatie nodig hebt, komt het wel goed (de meeste mensen hebben nog steeds Windows…voorlopig).

LEAVE A REPLY

Please enter your comment!
Please enter your name here

8 − seven =

Other episodes