Come faccio a creare un'interfaccia utente grafica in C ++? [chiuso]


270

Finora tutti i miei programmi C ++ hanno utilizzato l'interfaccia della riga di comando e l'unica altra lingua con cui ho esperienza è PHP che non supporta le GUI.

Da dove comincio con la programmazione grafica dell'interfaccia utente in C ++? Come posso crearne uno?


4
Dipende. Che tipo di sistema operativo stai prendendo di mira? Molti framework GUI sono specifici del sistema operativo.
Michael Ratanapintha,

3
Quale sistema operativo / piattaforma? Oppure, se sei interessato a scrivere app GUI multipiattaforma, ti preghiamo di dirlo: queste cose fanno una grande differenza per C ++ ...
Shog9

3
PHP supporta la scrittura di programmi GUI. Non c'è motivo per cui non puoi eseguire programmi PHP dalla riga di comando e ci sono librerie gui come PHP-GTK gtk.php.net e PHP-Qt php-qt.org che possono aiutarti Potresti anche voler valutare il motivo per cui hai bisogno C ++. Scrivere GUI in c ++ è più difficile che in molte altre lingue e potresti essere in grado di raggruppare il tuo codice c ++ in librerie richiamabili da Python o C # o PHP o qualcosa di un po 'più facile da codificare per le GUI.
Kibibu,

6
La tua domanda è così ampia che sto pensando che non vuoi solo i nomi dei toolkit o anche solo dei tutorial. Vuoi dei libri , quelli che ti danno più di API o esempi, che in realtà ti danno dei concetti. KTC ne consiglia alcuni qui sotto, ma suggerirei, qualunque sia il toolkit che scegli per iniziare a giocare, assicurati di trovarne uno di cui puoi leggere.
quark,

6
"Scrivere GUI in c ++ è più difficile che in molte altre lingue" In cosa stai basando questa affermazione?
piotr,

Risposte:


163

In sostanza, il sistema di finestre di un sistema operativo espone alcune chiamate API che è possibile eseguire per fare lavori come creare una finestra o mettere un pulsante sulla finestra. Fondamentalmente, ottieni una suite di file di intestazione e puoi chiamare funzioni in quelle librerie importate, proprio come faresti con stdlib e printf.

Ogni sistema operativo viene fornito con il proprio toolkit GUI, una suite di file di intestazione e chiamate API e il proprio modo di fare le cose. Esistono anche toolkit multipiattaforma come GTK , Qt e wxWidgets che ti aiutano a costruire programmi che funzionano ovunque. Raggiungono questo obiettivo avendo le stesse chiamate API su ciascuna piattaforma, ma un'implementazione diversa per quelle funzioni API che richiamano le chiamate API del sistema operativo nativo.

Una cosa che avranno tutti in comune, che sarà diversa da un programma CLI, è qualcosa chiamata loop di eventi. L'idea di base è in qualche modo complicata e difficile da comprimere, ma in sostanza significa che non sta succedendo molto nella tua classe principale / funzione principale, tranne:

  • controlla la coda degli eventi se ci sono nuovi eventi
  • se esiste, inviare tali eventi ai gestori appropriati
  • quando hai finito, restituisci il controllo al sistema operativo (di solito con una sorta di speciale funzione "sleep" o "select" o "yield")
  • quindi la funzione di rendimento tornerà quando il sistema operativo è terminato, e hai un altro giro intorno al ciclo.

Ci sono molte risorse sulla programmazione basata su eventi. Se hai esperienza con JavaScript, è la stessa idea di base, tranne per il fatto che tu, lo scripter, non hai accesso o controllo sul ciclo degli eventi stesso o su quali eventi ci sono, il tuo unico lavoro è scrivere e registrare gestori.

Dovresti tenere presente che la programmazione della GUI è incredibilmente complicata e difficile, in generale. Se hai l'opzione, in realtà è molto più semplice integrare un server web incorporato nel tuo programma e avere un'interfaccia basata su HTML / web. L'unica eccezione che ho riscontrato è Cocoa + Xcode + builder di interfacce + tutorial di Apple che lo rendono facilmente l'ambiente più accessibile per le persone nuove alla programmazione della GUI che ho visto.


"In realtà è molto più semplice integrare un server web incorporato nel tuo programma e avere un'interfaccia html / web. " Dipende. Se vuoi fare cose fantasiose (interfaccia utente complessa, controlli personalizzati, animazioni, ecc.) Sì. Se vuoi semplicemente una GUI tipica (con i soliti controlli e una sensazione nativa), no.
Ghianda

167

Esistono molte librerie GUI portatili gratuite , ognuna con i suoi punti di forza e di debolezza:

Soprattutto Qt ha simpatici tutorial e strumenti che ti aiutano a iniziare. Godere!

Si noti, tuttavia, che è necessario evitare funzionalità specifiche della piattaforma come l'API Win32 o MFC. Ciò ti lega inutilmente a una piattaforma specifica senza quasi alcun vantaggio.


25
Personalmente, penso che programmare l'API Win32 sia bello. Mi piace molto di più rispetto all'utilizzo di Qt, e questo di per sé è un vantaggio. Forse sono solo io, però.
mrduclaw,

6
La mia esperienza personale è esattamente l'opposto. L'API Win32 ha causato più problemi per me rispetto a qualsiasi altra API.
vog

17
@mrduclaw, "Penso che la programmazione per l'API Win32 sia bella". TROVO a tutti i costi per scrivere un codice portatile. (nota che ho usato la parola "prova" perché ci sono eccezioni ...) In che modo scrivere codice non portatile è considerato "bello"?
Trevor Boyd Smith,

11
@Trevor Boyd Smith: diversi obiettivi, suppongo. Quasi nessuno dei codici che ho mai scritto in modo professionale avrebbe potuto essere multipiattaforma, quindi non è mai stato un problema per me.
mrduclaw,

1
La domanda da un milione di dollari è che i ragazzi che creano i game trainer forniscono solo piccole exe e che i loro programmi hanno un'interfaccia utente meravigliosa, quindi mi chiedo come costruiscono l'interfaccia utente che non fornisce queste librerie di terze parti?
user889030

74

Algoritmo indipendente dal sistema operativo " Creazione di applicazioni GUI in C ++ in tre passaggi ":

  1. Installa Qt Creator

    inserisci qui la descrizione dell'immagine

  2. Crea nuovo progetto (applicazione widget Qt)

    inserisci qui la descrizione dell'immagine

  3. Costruiscilo.

Congratulazioni, hai la tua prima interfaccia grafica in C ++.

Ora sei pronto a leggere molta documentazione per creare qualcosa di più complicato dell'applicazione GUI "Hello world".


In passato, avevo avuto problemi con altre GUI non abbastanza adatte ai principianti. Ma Qt ha alcuni tutorial magnifici. Grazie per la raccomandazione!
JD

23

Dato il commento di "dire Windows XP come esempio", le opzioni sono:

  • Interagisci direttamente con il sistema operativo tramite la sua API, che per Microsoft Windows è una sorpresa chiamata API di Windows . Il riferimento definitivo per WinAPI è il sito Web MSDN di Microsoft . Un popolare tutorial online per principianti è il tutorial di programmazione API Win32 di Georger . Il libro classico è Windows di programmazione di Charles Petzold , 5a edizione .

  • Utilizzare una libreria specifica (sia in termini di sistema operativo che di compilatore) come MFC , che avvolge WinAPI in classe C ++. Il riferimento per questo è di nuovo MSDN. Un libro classico per questo è la Programmazione di Windows di Jeff Prosise con MFC, 2a edizione . Se stai usando dire CodeGear C ++ Builder, allora l'opzione qui è VCL .

  • Utilizzare una libreria multipiattaforma come GTK + (wrapper C ++: gtkmm ), Qt , wxWidgets o FLTKche avvolge l'API del sistema operativo specifico. I vantaggi con questi sono che in generale, il tuo programma potrebbe essere compilato per diversi sistemi operativi senza dover modificare i codici sorgente. Come già accennato, ognuno ha i suoi punti di forza e di debolezza. Una considerazione quando si seleziona quale utilizzare è la sua licenza. Per gli esempi forniti, GTK + & gtkmm sono sotto licenza LGPL, Qt è sotto varie licenze tra cui l'opzione proprietaria, wxWidgets è sotto la propria licenza wxWindows (con una rinomina in wxWidgets License) e FLTK è sotto LGPL ad eccezione. Per riferimento, esercitazione e / o libri, fare riferimento al sito Web di ciascuno per i dettagli.


9
MFC è malvagio. Preferirei utilizzare l'API WIN se non avessi altra scelta.
the_drow,


18

Dato che sono già stato dove sei adesso, penso di poterti "rispondere".

Il fatto è che non esiste un modo semplice per creare una GUI. Le GUI dipendono fortemente dalla piattaforma e dal codice specifico del sistema operativo, ecco perché dovresti iniziare a leggere la documentazione della piattaforma / sistema operativo di destinazione sulle API di gestione delle finestre. La cosa buona è che ci sono molte librerie che affrontano queste limitazioni e differenze di architettura astratte in un'unica API multi-piattaforma. Quelli suggeriti prima, GTK e Qt, sono alcune di queste librerie.

Ma anche questi sono un po ' troppo complicati, poiché vengono introdotti molti nuovi concetti, tipi di dati, spazi dei nomi e classi contemporaneamente. Per questo motivo, vengono utilizzati in bundle con alcuni editor WYSIWYG della GUI. Praticamente rendono possibile il software di programmazione con GUI.

Per riassumere, esistono anche "ambienti" non liberi per lo sviluppo della GUI come Visual Studio di Microsoft. Per quelli con esperienza in Delphi , Visual Studio potrebbe essere più familiare. Esistono anche alternative gratuite all'ambiente completo di Visual Studio fornito da Microsoft: Visual Studio Express , che è più che sufficiente per iniziare lo sviluppo della GUI.


15

Ho trovato un sito Web con un "semplice" tutorial: http://www.winprog.org/tutorial/start.html


8
Questo introduce l'API Win32, un approccio di livello molto basso alla programmazione della GUI che ti collega alla piattaforma Windows. Non lo consiglierei.
Vog

17
È un'opzione valida. Concordo sul fatto che potrebbe non essere il punto di partenza migliore, ma non merita un voto negativo.
Emil H,

1
So che questa non è la soluzione ideale, ma aiuta a imparare come funziona il sistema GUI in Windows. Ho letto questo tutorial un paio di anni fa e ora so cos'è il loop di messaggi e come funziona. Quando si lavora con winforms in .net questa conoscenza potrebbe tornare utile.
ZippyV,

7
Se hai intenzione di scrivere applicazioni desktop, non c'è sostituto per sapere come il sistema operativo esegue il rendering e interagisce con l'utente. Se usi una libreria senza capire i fondamenti, non capirai mai veramente cosa sta succedendo. Imparare un po 'di programmazione gui win32 di basso livello sarà tempo ben speso.
Jim In Texas,

@Jim In Texas: sono d'accordo, ma questo "po 'di basso livello" dovrebbe essere appreso dopo le basi, quindi trovo ancora questa raccomandazione inappropriata per i principianti.
Vog,

3

È facile creare una GUI di Windows .NET in C ++.

Vedi il seguente tutorial da MSDN . È possibile scaricare tutto il necessario (Visual C ++ espresso) per libera .

Ovviamente ti leghi a .NET, ma se stai solo giocando o hai solo bisogno di un'applicazione Windows, starai bene (la maggior parte delle persone ha ancora Windows ... per ora).


3

Uso FLTK perché Qt non è gratuito. Non scelgo wxWidgets , perché il mio primo test con un semplice Hello, World! programma ha prodotto un eseguibile di 24 MB, FLTK 0,8 MB ...


4
A causa delle modifiche alla licenza QT, ho intenzione di passare a QT
pernecker

2
Il mio programma wxWidgets è 5,9 Mb, anche con tutte le librerie collegate all'interno
msangel
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.