2010-01-21 6 views
5

Quindi ho imparato C# per un anno (ho 20 anni) e mi sto abbastanza fiducioso. Sono stato anche ingerenza con C++ di tanto in tanto. Ad esempio, recentemente ho seguito lo Nehe OpenGL tutorials per C++ e trovo un modo divertente di apprendere.Avvio di wxWidgets C++ ha bisogno di un leggero spintore

Voglio iniziare a guardare la creazione di software di interfaccia grafica multipiattaforma dopo che mi sono imbattuto in questa libreria denominata FLTK (qualcosa di fluido piuttosto). Dopo averlo finalmente e faticosamente messo in funzione, ho trovato rinfrescante sapere che ci sono soluzioni per la creazione di GUI in C++, tuttavia penso che FLTK fosse piuttosto vecchio.

Così ho cercato su google per alcuni framework GUI più recenti e ho deciso di iniziare a giocare con wxWidgets (deciso contro Qt a causa della licenza). L'ho scaricato, lo ho compilato e ho cercato di verificare se esistessero plug-in IDE per lo sviluppo RAD, come potete immaginare passando dal trascinamento di un componente a un modulo in C# speravo in qualcosa di simile.

ho imparato che code::blocks ha qualcosa del genere così ho provato che fuori. Andava bene, ma la cosa che mi ha sconvolto è stato l'orribile completamento del codice; mostrerebbe solo membri e metodi nell'oggetto corrente e nulla per i file di intestazione #inclusi. Capisco che il completamento del codice/IntelliSense non sia facile per C++ ma Visual Studio 2008 lo gestisce piuttosto bene. Ho trovato alcuni altri strumenti RAD come wxFormBuilder ma costa soldi, non qualcosa che voglio fare semplicemente per imparare.

Quindi la mia domanda è TLDR se qualcuno ha avuto esperienza con wxWidgets? Ti capita di sviluppare in qualsiasi IDE ti trovi a tuo agio e basta codificare la GUI? Significa nessun aiuto visivo? Forse potresti darmi una spinta in quale direzione dovrei andare :)

Grazie, questo è anche il mio primo post su questo sito anche se ho letto molte discussioni prima che mi hanno aiutato a risolvere problemi abbondanti. Saluti!

+1

Qt è LPGL - che dire di quella licenza non ti piace? IMO, Qt è la struttura più completa e professionale. Non contare. – JimDaniel

+1

Umm, penso che con LPGL non ti sia permesso il collegamento statico? E il mio codice deve essere opensource? Ho provato a leggere la cosa della licenza ma era un enorme lol TLDR quindi ho pensato che wxWidgets fosse gratuito sarebbe stata la scelta più appropriata. Forse no? – Daniel

+0

LGPL significa che devi fornire i file oggetto della tua applicazione per consentire il ricollegamento con le nuove DLL QT ... o qualcosa del genere :) Ecco perché uso wxWidgets - nessun problema! –

risposta

8

Il mio suggerimento è quello di imparare a fare il layout GUI con wxWidgets nel codice, poi quando si arriva bravo a farlo imparare a utilizzare gli strumenti grafici.

Fare questo tipo di lavoro manualmente per un po 'ti dà la comprensione di ciò che ti serve ("Ok, ho bisogno di un wxSizer, verticale, per mettere questi due wxSizer orizzontali, dove metto un wxStaticText e un wxTextCtl per ogni riga ... ") ... dove, se penso che se avessi iniziato con gli strumenti della GUI, tenderai a infastidirti perché (l'ultima volta che ho guardato) nessuno di loro era un editor Drag And Drop come te. NETTO.

+0

Ok grazie, inizierò con quello – Daniel

+0

+1 per questo buon consiglio. Iniziare da questa parte è una buona idea! –

+0

+1 per visualizzarlo nella tua testa. Credo che se non riesci a immaginare come fare manualmente, allora non sarai in grado di farlo correggere in un editor drag-and-drop. – Dashogun

0

C'è wxGlade e wxFormBuilder.

Non so se v'è un altro, ma la wxFormBuilder che so è libero e open source.

Troverete collegamenti ad altri strumenti nella pagina iniziale di wxGlade (http: // wxglade.sourceforge.net/).

La maggior parte di questi programmi siano in grado di file di XRC di output, che sono sono una rappresentazione XML della GUI. Affronta il problema della complessità del codice generato ma non è così potente.

Eppure personalmente non uso uno di questi strumenti, tranne a volte per vedere che cosa è andare a guardare come prima di me, ma non per generare in realtà il codice.

0

Io uso wxWidgets senza utilizzare un designer drag and drop.Ci sono ovviamente degli svantaggi in questo approccio, ma un vantaggio è che non si ha alcun codice orribile generato automaticamente da affrontare. In passato ho scoperto che avere questo tipo di codice nel bel mezzo del mio progetto ha causato vari tipi di dolore - specialmente se si decide che ha bisogno di alcuni cambiamenti importanti è spesso necessario ricominciare da capo perché i progettisti di moduli sono molto più bravi a scrivere "al contrario di" editing ".

Per applicazioni semplici è possibile assemblare un'interfaccia utente utilizzando una miscela di widget personalizzati e standard senza troppe difficoltà. Guarda gli esempi e le demo di wxWidgets, che usano questo approccio. Anche la mia app di scacchi (vedi il mio sito Web) utilizza questo approccio.

un più elaborato interfaccia utente potrebbe essere implementata scrivendo qualcosa di speciale ad un livello più alto di astrazione. Il tipo di cosa che sto pensando sarebbe un sottosistema che accetta richieste flessibili di alto livello per fornire diversi tipi di funzionalità dell'interfaccia utente, quindi ordina i dettagli dei controlli da creare e il posizionamento ecc. Di tali controlli. È una specie di mia fantasia tecnica, ma non ho mai provato a farlo davvero. In realtà, una struttura abbastanza primitiva di questo tipo è già disponibile e utilizzata dalle demo che ho menzionato; Si chiama "Sizer" (classe wxSizer) ed è fondamentalmente un contenitore di controllo.

Infine vorrei sottolineare che i problemi con la licenza di Qt hanno sostanzialmente andato via dal Nokia ha acquistato Trolltech e ne ha fatto "di più" free (licenza LGPL). Molte persone pensano che Qt sia la strada da percorrere in questi giorni. Sono abbastanza soddisfatto di wxWidgets, ma sicuramente valuterò seriamente Qyt un giorno. Buona fortuna con i tuoi progetti.

+0

Vero, in C# di solito decide di trasformare in modo casuale le cose invisibili ed è molto fastidioso, queste cose di Sizer suonano un po 'come l'inversione dell'aggancio. Cool grazie per il tuo input – Daniel

+0

I sizers sono uno strumento meraviglioso nelle mani di qualcuno che sa cosa stanno facendo. –

1

sicuramente dare Code::Blocks un altro tentativo. È un ambiente MERAVIGLIOSO per lavorare con wxWidgets in. Viene fornito con un designer di moduli e modelli per i progetti wxWidgets, quindi non posso immaginare di lavorare senza di esso.

Inoltre, per l'introduzione di un buon principiante per wxWidgets, provare this pagina. Mi ha aiutato molto quando ho iniziato con esso.

+0

Il tutorial a cui ti colleghi sembra buono, vorrei averlo saputo prima. È interessante però, tutte le mie esperienze con MFC sono state diaboliche - ogni problema che ho avuto ha richiesto la ricerca di uno strano incantesimo fornito da un esperto da qualche parte sulla rete. Quasi tutti i problemi che ho avuto con wxWidgets sono stato in grado di risolvere da solo con la normale logica del programmatore. Semplice esempio di problema; Cambia colore del testo statico. Soluzione MFC; Intercettare un sacco di messaggi di Windows, ecc. Soluzione wxWidgets; Chiama il metodo .color() sul controllo. La mia conclusione; MFC è solo superficialmente simile a wx. –

+0

MFC è VERO! Non lo userei mai. E anche se dovessi, lo odierò. –

+0

Sì, sono assolutamente d'accordo. Quindi è sorprendente la frequenza con cui il mantra che wxWidgets è semplicemente una sorta di framework MFC portatile. La mia esperienza è che sebbene ci sia una somiglianza superficiale, MFC è un problema, mentre wxWidgets è una soluzione. (Nel caso in cui confondesse il motivo per cui sto blaterando su questo, il tutorial altrimenti piacevole a cui ti sei collegato nella tua risposta spende molto spazio sulla somiglianza tra MFC e wxWidgets). –

0

wxFormBuilder ma costa soldi

wxFormBuilder è gratuito e open source

anche Visual Studio è meglio per C++ codifica in wxWidgets, ma vi imbatterete in un sacco di problemi su Linux a causa di il modo in cui Visual Studio gestisce molte cose, come i nomi dei file, è necessario prestare particolare attenzione alla distinzione tra maiuscole e minuscole.

per quanto riguarda anche l'interfaccia grafica, aggiungere il wxFormBuilder alla soluzione di Visual Studio, aggiungere il gestore tipo di file a Visual Studio. Ora basta fare doppio clic su di esso e aggiungere le finestre di dialogo, come lo fai in C#. Basta aggiungere i file di codice generati al progetto Visual Studio una volta e il gioco è fatto.

È molto facile utilizzare Visual Studio con la GUI di programmazione in wxWidgets.

Inoltre, non dimenticare di guardare l'editor CodeLite se vuoi effettuare il port su Linux. È molto compatibile con i progetti di Visual Studio e i tasti di scelta rapida.

+0

Ah! wxWidgets in VC++: una ricetta per i problemi. Vedi http: // StackOverflow.com/domande/1916782/wxWidgets-staticamente-ma-applicazioni statiche-library-link-in--con-il-lib-ancora-richiedere e http://stackoverflow.com/questions/134029/wxwidgets-setup-h- no-tale file –

+0

Fortemente, in disaccordo, avete bisogno di qualche esperienza per iniziare, ma una volta che il sistema si avvia, la sua molto veloce programmare utilizzando VS. E posso dire questo perché ho scritto uno strumento di integrazione wxVS2008Integration molto indietro (non più disponibile), ed è molto facile da usare VS in confronto a qualsiasi altro IDE. –

+0

Dopo aver usato sia VC++ che CodeBlocks, posso dire onestamente che CodeBlocks è migliore. Non è perfetto, ma è ancora meglio. –

0

ho sviluppato un certo numero di interfacce grafiche di applicazioni che utilizzano wxWidgets - è possibile vedere le immagini in http://ravenspoint.com/

IMHO, è necessario distinguere tra la progettazione di un'interfaccia grafica e la sua attuazione. Aspettarsi di usare lo stesso programma per progettare la propria GUI e di emettere automaticamente tutto il codice per implementare il design è in attesa troppo.

Un programma di progettazione dovrebbe essere veloce e semplice. Raccomando http://www.balsamiq.com/

Una volta stabilito il disegno, è possibile passare alla codifica. Personalmente, trovo che posizionare i widget su un pannello usando i parametri wxPosition e wxSize dei costruttori wxWidget sia banale - più facile che cercare di spingere i widget nelle loro posizioni esatte usando il mouse.

Il problema con l'utilizzo di una sorta di generatore di moduli per emettere tutto il codice per una GUI significativa è che si finisce con un mucchio di codice generato automaticamente in cui è difficile orientarsi. Se il codice è stato scritto a mano , quindi sai già dove si trova tutto.

+1

So che questa non è una soluzione, ma quello che faccio è usare un RAD per progettare il modulo, quindi copiare e incollare il codice in un editor e "sistemarlo". Quindi lo integro nel codice sorgente dell'app. –

+0

George - è una soluzione se funziona per te. Tuttavia, il passaggio "sistemalo" mi sembra noioso. Mi chiedo se potrebbe mai produrre codice facilmente manutenuto con, ad esempio, nomi di variabili significativi e ordine di codice? Il problema sia con il tuo sia con il mio approccio è, naturalmente, l'iterazione del design. Almeno i mock-up della GUI di balsamiq non pretendono di emettere il codice, e non mi trovo a dover modificare un misto di macchina e codice generato dall'uomo - è tutto il mio lavoro, nel bene e nel male. Dopo un po 'impari a scrivere codice GUI che è facile da regolare quando i clienti chiedono modifiche. – ravenspoint

0

Ho appena finito di fare un ciao programma mondiale sia in wx che fltk usando l'IDE netbeans. Microsoft Visual Studio WinForms o MFC era molto più semplice di entrambi. Avevo bisogno di funzionalità multipiattaforma quindi non potevo utilizzarlo per questa applicazione. Ho finito fltk in molto meno tempo di wx. Il programma era più semplice, più piccolo, più veloce e più facile da scrivere. Wx aveva documentazione e organizzazione abbastanza disgiunte. Fltk è stato progettato di nuovo nei "vecchi tempi" quando è stato valutato piccolo veloce ed efficiente. Questo è probabilmente il motivo per cui ti sembra "vecchio". Sono un ragazzo vecchio, quindi ha funzionato per me. YMMV