Domanda

sto spendendo queste vacanze imparare a scrivere applicazioni Qt. Stavo leggendo su Qt Designer solo poche ore fa, che mi ha fatto pensare: che cosa la gente che scrivono applicazioni del mondo reale in Qt usano per progettare i loro GUI? In realtà, come fa la gente progettare interfacce grafiche in generale?

Io, per esempio, ha scoperto che scrivere il codice a mano era concettualmente più semplice di utilizzare Qt Designer, anche se per complesso Designer GUI potrebbe avere senso. Grandi GUI potrebbe essere possibile utilizzando Designer, ma con il tempo potrebbero diventare molto difficile da gestire con l'aumentare della complessità (questa è solo la mia opinione). Ho scaricato anche il codice sorgente Amarok per dare uno sguardo a quello che quei ragazzi stavano facendo, e ha trovato molte chiamate a addWidget () e amici, ma nessuno di questi file XML creati da designer (a parte: AmaroK deve essere la mia applicazione preferita mai su qualsiasi piattaforma).

Qual è, allora, è il modo "giusto" per creare una GUI? Designer o il codice? Cerchiamo, per questa discussione, consideriamo i seguenti tipi di interfacce grafiche:

  1. le finestre di dialogo semplici che hanno solo bisogno di prendere l'input, mostrare qualche risultato e uscire. Supponiamo di un'applicazione che richiede un URL di YouTube e scarica il video sul disco rigido dell'utente. Il tipo di applicazioni un principiante è probabile che iniziare con.
  2. GUI
  3. Livello intermedio come, ad esempio, un editor di note adesive con alcuni elementi della barra degli strumenti / menu. Prendiamo ad esempio xPad ( http://getxpad.com/ ). Direi che la maggior parte delle applicazioni che rientrano nella categoria di "utilities".
  4. GUI molto complesse, come Amarok o OpenOffice. Non si sa 'em quando si vede' em perché fanno sì che gli occhi sanguinare.
È stato utile?

Soluzione

La nostra esperienza con Designer è iniziata nel Qt3.

Qt3

A quel punto, Designer è utile soprattutto per generare il codice che si sarebbe quindi compilare nella vostra applicazione. Abbiamo iniziato a utilizzare a tale scopo, ma con tutto il codice generato, una volta di modificarlo, non è più possibile tornare indietro e rigenerarsi senza perdere le modifiche. Abbiamo finito per prendere il codice generato e fare tutto a mano d'ora in poi.

Qt4

Qt4 è migliorata in modo significativo Designer. Non più non genera solo il codice, ma si può caricare dinamicamente nei file Designer (in XML) e collegarli in modo dinamico agli oggetti in esecuzione nel vostro programma - Numero di codice generato tuttavia, si ha a nominare gli elementi in Designer e bastone con i nomi di non rompere il vostro codice

.

La mia valutazione è che è in nessun posto vicino così utile come Interface Builder su Mac OS X, ma a questo punto, ho potuto vedere utilizzando i file Designer direttamente in un programma.

Non siamo tornato a Designer dal Qt3, ma ancora usarlo al prototipo, e layout di debug.

Per i vostri problemi:

  1. Si potrebbe probabilmente ottenere via con usando le finestre di dialogo standard che Qt offre. QInputDialog o se si sottoclasse QDialog, assicurarsi di utilizzare QButtonDialogBox per assicurarsi che i tasti hanno la giusta piattaforma di layout.

  2. Si potrebbe forse fare qualcosa di più limitato come xPad con funzionalità limitate Designer.

  3. Non vorrei pensare che si potrebbe scrivere qualcosa di simile OpenOffice esclusivamente con designer, ma forse non è questo il punto.

userei Designer come un altro strumento, proprio come il vostro editor di testo. Una volta trovato i limiti, provare uno strumento diverso per questo nuovo problema. Sono assolutamente d'accordo con Steve S che uno dei vantaggi di Designer è che qualcun altro che non è un programmatore può fare il layout.

Altri suggerimenti

Nella mia esperienza con Designer Qt e altri toolkit / UI-tools:

  • strumenti di interfaccia utente velocizzare il lavoro.
  • strumenti di interfaccia utente rendono più facile modificare il layout di seguito.
  • Strumenti
  • UI rendono più facile / possibile per i non programmatori di lavorare sul design dell'interfaccia utente.

La complessità può spesso essere affrontato in uno strumento di interfaccia utente rompendo la progettazione in più file di interfaccia utente. Includere piccoli gruppi logici di componenti in ogni file e trattare ogni gruppo come un unico widget che viene utilizzato per costruire la completa interfaccia utente. concetto di Qt Designer di widget promossi può aiutare con questo.

Non ho trovato che la portata del progetto fa alcuna differenza. La vostra esperienza può variare.

I file creati con gli strumenti di interfaccia utente (immagino li si potrebbe scrivere a mano se si voleva davvero) spesso possono essere caricati dinamicamente a run-time (Qt e GTK + sia di fornire questa funzionalità). Questo significa che è possibile apportare modifiche al layout e testarli senza ricompilare.

In definitiva, credo che entrambi gli strumenti di codice e di interfaccia utente prime possono essere efficaci. Probabilmente dipende molto l'ambiente, il toolkit / UI-tool, e, naturalmente, preferenze personali. Mi piace strumenti di interfaccia utente, perché arrivare me e corre veloce e consentono un facile modifiche in seguito.

L'organizzazione per cui lavoro ha portato la sua applicazione GUI per Qt diversi anni fa. Penso che ci sono diversi aspetti che sono degni di nota:

  • Lavorare con Qt Designer, almeno in quel punto, non era un'opzione realistica: c'erano troppe funzioni che non poteva essere fatto con Qt Designer;
  • Convenzioni e la struttura che doveva essere conservato impedito l'uso di Qt Designer;
  • Una volta che hai iniziato senza di Designer, probabilmente è difficile tornare ad esso;
  • l'aspetto più importante, però, era che i programmatori sono stati molto utilizzati per la programmazione utilizzando vi o emacs, invece di usare un IDE GUI.

La mia esperienza, che risale circa. 4 anni, utilizzando Qt3.3, è che il comportamento dinamico nelle finestre di dialogo non è stato possibile realizzare in Designer.

Solo per dire che ho scritto e mantenuto interfacce grafiche complesse in Qt senza l'utilizzo di Qt Designer - non perché non mi piace Qt Designer, ma perché non ho mai avuto intorno a lavorare in questo modo

.

E 'in parte una questione di stile e da dove vieni da: quando ho iniziato su Qt, avevo avuto esperienze orribili di Dreamweaver e FrontPage e altri strumenti HTML visuali, e il codice di scrittura di gran lunga preferito con HomeSite e ricorrere a Photoshop per problemi di layout difficili.

C'è un pericolo con IDE codice visivi che si tenta di mantenere all'interno dei strumenti visivi, ma finiscono per dover modificare il codice, come pure -. In modi che non sono ben compresi

sviluppo iPhone di apprendimento, per esempio, ho trovato frustrante per colpire 'magia' roba visiva ( 'trascinate dal cerchio vuoto nella finestra di ispezione connessioni all'oggetto nella finestra Interface Builder ...') che sarebbe più semplice (per me) a capire nel codice vecchio pianura.

Buona fortuna con Qt - è un ottimo toolkit, comunque lo si utilizza, e Qt Creator si presenta come essere un grande IDE

.

mi piacerebbe aggiungere che una delle ragioni per l'utilizzo di progettazione grafica è stata la mancanza di gestori di layout in Win32, per esempio. Solo posizionamento assoluto era possibile, e farlo a mano avrebbe semplicemente risucchiato.

Da quando sono passato da Delphi a Java per applicazioni GUI (nel 2002), non ho mai usato i progettisti più. Mi piace gestori di layout molto di più. E sì, si ottiene codice standard, ma gli oggetti in movimento su un designer dell'interfaccia utente può prendere tutto il tempo come cambiare il testo standard. Inoltre, sarei bloccato con un IDE lento; questo è il caso # Java / C, OK, mentre per Qt (soprattutto Qt4) non si applica. Per Qt3, mi chiedo perché si dovrebbe modificare il codice generato - non era forse possibile aggiungere il codice in altri file? Per quale motivo?

A proposito di casi discussi: 1) La mano Coded GUI è probabile che più veloce di scrivere, almeno se si conoscono le librerie. Se sei un principiante e non li conoscete, si può risparmiare tempo e imparare meno con un designer, dal momento che non c'è bisogno di imparare le API che si utilizzano. Ma "imparare meno" è il fattore chiave, quindi in entrambi i casi direi mano Coded GUI.

2) barre di menu sono abbastanza fastidioso per scrivere il codice per. Inoltre, pensare ai dettagli come gli acceleratori e così via. Ancora, dipende da quello che siete abituati. Dopo qualche tempo, può essere più veloce da digitare che boilerplate rispetto a punto-e-clicca in progettista per risolvere tutte quelle proprietà, ma solo se si può veramente digitare come in una macchina da scrivere (come quegli amministratori per i quali comandi digitando Unix è più veloce utilizzando qualsiasi interfaccia grafica).

3) Mi piacerebbe estendo la risposta per caso # 2 a questo. Si noti che, per le piattaforme Win32, può essere possibile che l'uso di designer che generano risorse Win32 potrebbe essere più veloce da caricare (idea su questo).

Tuttavia, mi piacerebbe parlare di un potenziale problema con l'utilizzo di Qt Designer lì. caso mondo reale: ci sono voluti alcuni secondi (diciamo 10) per caricare una finestra Java complesso (la finestra di dialogo Preferenze per l'editor di testo di un programmatore), con un sacco di opzioni. La corretta soluzione sarebbe stata quella di caricare ciascuna delle schede solo quando il programmatore voleva vederli (mi sono reso conto che, dopo), con l'aggiunta di un metodo separato per ciascun set di preferenze per costruire la sua interfaccia grafica.

Se si progetta tutte le schede e la scheda switcher insieme ad un designer, si può fare che, come facilmente? Credo che ci potrebbe essere un esempio simile in cui una GUI codificato mano che offre una maggiore flessibilità, e in una grande app tale, è molto probabile che bisogno di questo, anche se solo a scopo di ottimizzazione.

Uno dei principali vantaggi dell'utilizzo di progettista per creare GUI è che altri programmatori possono cambiare o mantenere le forme e widget facilmente senza la necessità di scavare in un codice complesso.

Il suo strano che stai dicendo la scrittura del codice è più semplice che la manipolazione di oggetti in un ambiente grafico. E 'un gioco da ragazzi.
Il progettista è lì per rendere la vita più facile e, a lungo termine rende il codice più mantenibile. E 'più facile guardare nella finestra di progettazione per vedere che cosa la vostra interfaccia utente si presenta come allora la lettura del codice e cercando di immaginare cosa potrebbe essere simile.
Con corrente Qt si può fare quasi tutto dalla finestra di progettazione e le poche cose che non si possono fare, si può risolvere con poche righe di codice nel costruttore. Prendete per esempio l'esempio più semplice - l'aggiunta di una connessione di segnale-slot. Utilizzando il progettista è semplice come un doppio click. Senza il progettista è necessario andare occhiata la firma corretta del segnale, modificare il file .h e quindi modificare scrivere il codice nel file cpp. Il progettista ti permette di essere al di sopra di questi dettagli e concentrarsi su ciò che conta davvero -. La funzionalità della vostra applicazione

Mi piace girare prima al progettista di sviluppare widget GUI. Come già detto in altri post, il suo più veloce. È inoltre possibile ottenere un feedback immediato per vedere se "sembra giusto" e non è fonte di confusione per l'utente. Il designer è un importante motivo per cui ho scelto Qt su altri toolkit. Io uso per lo più il progettista per fare le finestre di dialogo una tantum.

Detto questo, io faccio la finestra principale e le eventuali widget complesse a mano. Credo che questo sia il modo Trolltech destinato. QFormLayout è una classe che forniscono per creare facilmente programatically un'apposita finestra di dialogo.

Tra l'altro, il progettista in Qt 4 non è un IDE come quello che avevano in Qt 3. E 'solo un editor per la modifica dei file .ui. Mi piace così. La nuova piattaforma croce IDE sta per essere chiamato Qt Creator.

E 'un vecchio post, ma io vi consiglio di guardare Clementine - un lettore musicale che (credo) deriva da Amarok. Usano Qt4 e da quello che posso vedere c'è una cartella ui nella cartella src del progetto. Nel ui cartella come ci si potrebbe aspettare di avere tutti i tipi di file .ui. Se si compila e si avvia Clementine vedrete che l'interfaccia grafica è piuttosto complesso e piuttosto bella.

Per me, dipende da quanto logica è incapsulato nel widget / GUI. Se si tratta solo di forme semplici, io preferisco usare QtDesigner.

Se contiene controlli complessi o interazione, tendo a programmarlo.

Stiamo usando il Designer Qt se qualcuno ha bisogno di creare una GUI.
La cosa è di creare solo piccole Widget per alcune attività (come si farebbe in una classe-design) e poi metterli insieme in un "genitore-gui".

In questo modo i widget sono altamente riutilizzabili e potrebbero essere utilizzati per Guis in maniera modulare. Devi solo specificare che segnala ogni Widget è l'invio, e che gli slot che forniscono.

Inoltre stiamo creando .ui-Files, che di quello che potrebbe essere generato durante l'accumulo di processo. Fino ad ora non vi era alcuna necessità di modificare i file a mano.

Crea diverse parti del tuo utente
in diversi file .ui utilizzando QtDesigner,
poi riunirli (e aggiungere complicazioni) nel codice.

Ci sono cose che non si possono fare in Qt Designer, si può fare solo in codice,
così Qt Designer è solo uno (gran) parte del tool chain .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top