Buona libreria C + GUI per Windows

Sto cercando una buona libreria GUI di Windows per C ++. Le caratteristiche ideali a mio avviso dovrebbero essere:

  • Moderno MFC, wxWidgets, Qt sono stati avviati molto tempo fa e non usano le moderne funzionalità C ++ e la libreria standard.
  • Avere un ricco set di controlli con funzionalità decenti. La possibilità di rilasciare HTML quasi ovunque è una felicità per la quale amo wxWidgets quando non lo odio.
  • Open source . È il dovere. Se le fonti sono disponibili dopo l’acquisto, allora è considerato ok.
  • Avere un designer di moduli in qualche modo . Sì, sarebbe fantastico. Dopo anni passati a lavorare con Delphi, piango ogni volta che devo specificare manualmente le dimensioni del controllo.
  • Gratuito per uso commerciale . Ma se alcune librerie sono VERAMENTE buone, allora prenderò in considerazione l’acquisto.
  • Cross platform . Questa specifica è solo un tie-breaker ☺. Posso vivere senza questo.

Si prega di suggerire le vostre idee per i candidati. Una biblioteca per risposta per favore.

Penso che tu stia scrivendo Qt off troppo velocemente; non usa molto la libreria standard, ma questo ha meno a che fare con l’essere obsoleto che con priorità diverse. I contenitori QT usano iteratori, algoritmi template, ecc, ma hanno un modello iteratore diverso; Gli iteratori di Qt puntano tra gli elementi anziché su di loro. Questo rende simmetrico l’attraversamento in avanti e all’indietro e ripulisce alcuni casi limite per l’inserimento e la rimozione di elementi durante il movimento, sebbene sia un po ‘meno efficiente. E forniscono anche iteratori in stile STL. È una scelta valida per una libreria GUI IMO; è improbabile che le prestazioni dei contenitori siano il fattore critico.

Per quanto riguarda il preprocessore (moc), pensatelo più come un compilatore IDL che sa leggere gli header C ++ invece di aver bisogno del proprio linguaggio. Non esegue il preprocesso del codice, che viene compilato direttamente. Genera semplicemente un file cpp aggiuntivo contenente il marshalling per i callback segnale / slot, che può diventare piuttosto confuso quando attraversano i confini dei thread e hanno bisogno di sincronizzazione.

Qt è gratuito se puoi rilasciare le tue fonti (anche per uso commerciale, quanti strumenti interni hanno davvero bisogno di essere proprietari), e non a prezzi irragionevoli se non puoi (nessun canone per unità o qualcosa di particolarmente fastidioso)

Se stai cercando una libreria C + GUI moderna , Adam & Eve della Adobe Source Library (ASL) è la cosa giusta (dipende molto dalle librerie Boost ).

Quello che mi piace davvero, è che il design del layout è completamente disaccoppiato dal codice. La definizione del layout può essere in un file esterno, in modo che l’utente possa modificare il layout senza ricompilare il programma.

Un esempio dal sito:

layout clipping_path { view dialog(name: "Clipping Path") { column(child_horizontal: align_fill) { popup(name: "Path:", bind: @path, items: [ { name: "None", value: empty }, { name: "Path 1", value: 1 }, { name: "Path 2", value: 2 } ]); edit_number(name: "Flatness:", digits: 9, bind: @flatness); } button(name: "OK", default: true, bind: @result); } } 

Che produrrà:

clippingpath

Oltre a questo l’ASL ha anche altre utili classi di utilità.

Modifica: ma ( ancora ) non ha un designer di moduli.

WTL è un moderno framework GUI creato da Nenad Stefanovic del team ATL. È leggero ma supporta ancora tutte le funzionalità moderne del sistema operativo.

Libreria di modelli di Windows

Windows Template Library (WTL) è una libreria C ++ per lo sviluppo di applicazioni Windows e componenti dell’interfaccia utente. Estende ATL (Active Template Library) e fornisce un set di classi per controlli, windows di dialogo, windows frame, oggetti GDI e altro.

La documentazione non ufficiale vive nel Progetto del Codice .

Dovresti dare un’occhiata a gtkmm . È scritto in c ++ moderno, usa stl, ne segue le convenzioni, include il supporto per utf-8. Inoltre, è open source, multipiattaforma e sotto licenza lgpl. Dal loro sito:

Caratteristiche:

  • Usa l’ereditarietà per ricavare widget personalizzati.
  • Gestori di segnale sicuri per tipo, in standard C ++.
  • Polimorfismo.
  • Uso della libreria standard C ++, incluse stringhe, contenitori ed iteratori.
  • Completa internazionalizzazione con UTF8.
  • Completa gestione della memoria C ++
    • Composizione dell’object
    • Deallocazione automatica di widget allocati dynamicmente.
  • Pieno utilizzo degli spazi dei nomi C ++.
  • Nessun macro.
  • Multipiattaforma: Linux (gcc), FreeBSD (gcc), NetBSD (gcc), Solaris (gcc, Forte), Win32 (gcc, MSVC ++, Net 2003), MacOS X (gcc), altri
  • Software gratuito e gratuito per Open Source e sviluppo proprietario.
  • Discusso, progettato e implementato in pubblico.

wxWidgets: gratuito, consentito per l’applicazione commerciale con molti designer disponibili ( http://wxdsgn.sourceforge.net/ , http://www.dialogblocks.com/ , http://wxformbuilder.org/ , http: // wxglade. sourceforge.net/ …).

Scrivo personalmente molti dei miei widget da zero ma questa non è sempre un’opzione.

Dai un’occhiata a eGUI ++ che ha un bel modello di object moderno. Puoi vedere un articolo MDN Portare la semplicità dei Windows Form in app native E puoi scaricare il codice dal sito web di John Torjo

Consiglio vivamente JUCE , è un bel c ++ moderno pulito che è molto ben documentato con commenti doxy. Ha una vasta gamma di classi gui ed è molto semplice estendere quelle esistenti. La libreria copre anche più di un semplice gui, c’è un sacco di codice per la manipolazione e la generazione del suono, per il threading, la lettura / scrittura di formati di immagine moderni, il networking di base e molto altro. È anche bello (ha un aspetto OS X di default) ed è multipiattaforma.

Il lato negativo: sebbene sia gratuito (in entrambi i sensi) per uso non commerciale, l’uso commerciale richiede la licenza commerciale che è piuttosto costosa.

Tutto sumto, sicuramente vale la pena dare un’occhiata, l’ho usato per diversi progetti di hobby, uno dei quali ho intenzione di rilasciare ad un certo punto. In realtà rende la codifica della GUI in c ++ divertente, e questo sta dicendo qualcosa!

Un tempo, avevo un certo interesse per Ultimate ++ . La bella licenza (BSD), un IDE, supporta vari compilatori, usati in una serie di applicazioni complesse del mondo reale (molto importanti!), Ecc.
Non ho mai avuto il tempo di investire lì, ma continuo a vederlo come un’alternativa interessante.

La libreria Nana C ++ mira alla libreria portatile e di facile utilizzo, fornisce un framework GUI e thread per una facile programmazione con i moderni metodi C ++, come i tratti, metaprogrammazione e altre tecnologie template.

Un blog per questo progetto: http://sourceforge.net/p/nanapro/blog

Scarica l’ultima versione su http://sourceforge.net/projects/nanapro

Mi chiedo perché questo non sia stato menzionato prima: consiglierei CEGUI , che è multipiattaforma (incluso Windows) e supporta sia OpenGL che DirectX, permettendoti di integrarlo senza problemi in qualsiasi applicazione di gioco o rendering / visualizzazione. Sembra anche che soddisfi perfettamente tutte le tue esigenze.

  • Modern (usa STL , XML per i suoi file di risorse e supporta internamente lo standard C99 per la massima compatibilità, dopo la versione 1.0 utilizzerà C ++ 11 nel ramo di sviluppo). Supporta anche caratteri unicode e tutti i tipi di linguaggi (come si può vedere negli esempi).

  • Offre i seguenti widget pronti all’uso: campi di testo (scorrevoli), editbox, multiline editbox, spinners, checkboxes, pulsanti, pulsanti radio, windows a tabs, barre di avanzamento, riquadri scorrevoli, cursori, menu a discesa (caselle combinate) , barre dei menu, contenitori di layout (verticale / orizzontale) e altro

  • Pubblicato sotto la licenza Open Source MIT , una delle licenze che ti offre la massima libertà, dovrai solo distribuire il file di licenza con l’applicazione e il gioco è fatto

  • I layout possono essere facilmente creati e modificati utilizzando un editor WYSIWYG scritto in Python. Si chiama CEED ed è anche liberamente disponibile. Ha superato molti test ed è adatto per essere utilizzato per la produzione. È stata pubblicata una versione stabile e nuove funzionalità sono in sviluppo per il futuro. Un editor di immagini è disponibile anche nella stessa applicazione.

  • Come affermato, questo è gratuito per uso commerciale . L’unico obbligo che hai è di distribuire il file di licenza.

  • CEGUI è adatto per l’uso multipiattaforma . Supporta ufficialmente Windows, Linux, Mac OS . È stato anche utilizzato su iOS e Android. Android è supportato nel ramo di sviluppo.

È stato originariamente progettato come una libreria GUI per i giochi, ma è anche perfetto per l’utilizzo in applicazioni scientifiche, applicazioni di rendering, visualizzazione. Anche le applicazioni desktop possono essere eseguite. Un semplice skin simile a Windows è disponibile nelle risorse predefinite.

È attivo da oltre 10 anni, ha una comunità triggers ed è una libreria robusta, ricca di funzionalità ed estensibile.

Vorrei dare una seconda occhiata a Qt: non è gratuito per uso commerciale, ma ha una buona licenza entry-level se sei appena agli inizi. Penso che la loro interfaccia sia abbastanza moderna, anche se non mi piace che sembrino fare affidamento su estensioni linguistiche da loro preelaborate.

Cosa stai cercando in particolare nella categoria Modern?

Sia wx che QT possono usare la libreria standard. Contengono le proprie classi di raccolta (come MFC) dei giorni, non molti anni fa, quando il supporto del compilatore per STL era irregolare. Alcune aggiunte come le stringhe copy-on-write non sono ancora in STL.

Potrebbero entrambi utilizzare modelli per alcuni dei meccanismi di invio eseguiti da macro (wx) o precompilatore (QT) ma che non otterrebbero alcun risultato tranne il codice meno leggibile.

Recentemente ho iniziato a cercare anche una GUI e ho iniziato a sperimentare con ciascuno di essi. Per quanto posso dire:

  • Qt non è solo una libreria GUI, ma anche un framework (incluso ECMAScript, SQL, supporto XML e altro).
  • Qt è una scelta solida e può essere compresa tagliandola in circa mezz’ora.
  • purtroppo, Qt ti obbliga a usare il loro modello di programmazione, ma puoi facilmente evitarlo e scrivere codice nel tuo stile.
  • Qt è di proprietà di Nokia e, se sei una persona che prende in considerazione problemi politici quando scegli una libreria, Nokia ha recentemente stipulato un accordo con Microsoft per utilizzare Windows Phone 7 sui suoi telefoni.
  • GTK + è stata la mia scelta personale ma non è nativa su tutte le piattaforms. Sebbene funzioni alla stessa velocità dei controlli nativi di Windows, a volte più veloce.
  • Le porte wxWidgets sono native su ogni piattaforma ed è il mio secondo riferimento personale dopo GTK +, poiché non è orientato al profitto.

Hai guardato il toolkit Fox ?

Devo gettarmi il cappello con Qt. Siamo titolari di licenza commerciale di Qt e, sebbene costosi, valgono ogni dollaro. La base del codice Qt è molto solida. Il designer della GUI è uno degli strumenti migliori di questo tipo. Qualche tempo fa abbiamo valutato un gruppo di toolkit GUI disponibili per Windows uno contro l’altro e Qt è uscito più avanti in ogni aspetto, quindi ho visto alcuni di questi altri toolkit.

Se vuoi che i proiettili qui siano miei …

  • Orientato agli oggetti, Qt ha un’architettura OO molto bella che è molto coerente in tutta la gerarchia delle classi

  • Segnali e slot ti danno un buon modo per gestire il problema di callback sempre presente durante lo sviluppo di interfacce utente

  • Mentre un po ‘eccessivamente complicato, ti guida verso un’architettura MVC di mostrare dati, che non è una cosa negativa

  • Oltre all’ampio set di classi UI ci sono serie di classi più grandi che supportano DB Operations, Threading, Networking e altre attività.

Sì Qt utilizza internamente contenitori non STL e stringhe non STL. Ma non lasciare che sia il tuo criterio per squalificare il QT. I contenitori QT hanno tutti iteratori simili a STL e la class String ha molte funzionalità. Ultimo ma non meno importante, ha un buon supporto multipiattaforma.

Voterò per il WTL. Leggero e nativo. Non puoi battere questi due criteri dal mio punto di vista. Scrivo il mio livello del modello in stl c ++ e utilizzo le librerie native per sistema operativo. Ciò garantisce che le tue app non assomiglino e ti consente di utilizzare la più ampia gamma di funzionalità su ciascun sistema operativo.

Per un designer di GUI WTL consiglio l’eccellente, ma per qualche motivo completamente sconosciuto alla maggior parte di WTLBuilder: http://www.wtlbuilder.com.

Che dire di Smartwin ++ ?

La loro wiki sembra essere giù adesso. Esempio Hello World! codice da documenti Smartwin ++

Da quando hai chiamato Delphi: Sai Borland C ++ Builder fa anche VCL come Delphi? Puoi distribuirlo gratuitamente e ottieni il codice sorgente.

Che mi dici di Winx ?

Meglio tardi che mai, ma potresti trovarlo interessante . I tuoi unici requisiti che soddisfa sono “Open Source” e “Free”. Fa qualcosa che non hai chiesto

  • ridurre il codice sorgente di un ordine di grandezza

  • ti dà il controllo totale su layout, associazione dati, array variabili di controlli, ecc.

Quando vedi come funziona, puoi aggiungere facilmente i tuoi controlli.

A proposito, ha uno svantaggio in più: è avvincente.

Raccomando di usare Qt perché:

  • È multipiattaforma e copre un’ampia gamma di sistemi operativi (compresi quelli mobili)
  • È opensource e ha una velocità elevata per migliorare
  • Ha un bel progettista GUI e un IDE molto capace (Qt Creator)
  • Il design dell’API è eccellente e facile da usare
  • Ha una grande documentazione che è facile da leggere
  • Ha il sistema di traduzione Qt che ti consente di avere un’app multilingue
  • Il sistema di layout della GUI in cui i widget si ridimensionano secondo un layout rende tutto molto più semplice
  • Il QML ti dà il potere di creare una GUI fantastica con una grafica e animazioni fantastiche
  • Ha un ottimo supporto per il networking e la connettività (socket, SSL, www, IPC, …)
  • Ha QTestLib per testare il codice
  • Ha molti collegamenti linguistici se non vuoi usare C ++