2009-12-24 9 views
15

Ho sviluppato per piattaforme Windows e * nix per un po 'di tempo e sto cercando di passare allo sviluppo Mac. Mi sto lanciando tra l'uso di ObjC/Cocoa e C++/Qt4.5.Qt4.5 vs Cocoa per interfaccia utente Mac nativa

La semantica C++/moc ha più senso per me, e migliorare la conoscenza in Qt sembra una cosa sensata da fare dato che si finisce con un set di abilità che copre più piattaforme.

È probabile che io possa ostacolare le mie applicazioni saltando Cocoa?

Le applicazioni di esempio Qt sembrano piuttosto native di Mac per me, ma sono piuttosto semplici e potenzialmente non raccontano tutta la storia. Ci sono altri professionisti nel modo Xcode che Qt non ha, come packaging, distribuzione, ecc.?

+0

Un sacco di persone hanno un occhio molto nitido su come sia un'app "Mac-native" e per noi le app Qt non lo riducono. "Uso i controlli aqua" non si traduce in "Sono un buon cittadino sul tuo Mac". –

risposta

13

Ecco un modo semplice per rispondere:

Se si stavano sviluppando un'applicazione Windows con .NET o MFC, vuoi handicap vostre applicazioni utilizzando Qt? Se la risposta è sì, allora è probabile che la situazione sia la stessa sul Mac.

Alcuni aspetti negativi che posso pensare fuori della parte superiore della mia testa:

  • Licensing
  • applicazioni Qt, anche se buono, non sono del tutto un'esperienza di interfaccia utente nativa e ci sono cose un designer dell'interfaccia utente nativo può fare in Cocoa che sconvolge la mente. Mentre non posso essere sicuro che tutte le stesse funzionalità non siano disponibili in Qt, ne dubito.
  • Qt è sempre un po 'indietro. Se Microsoft o Apple hanno una nuova grande tecnologia, devi aspettare che gli sviluppatori di Qt aggiornino Qt.

Tuttavia, con tutto ciò che è stato detto, solo tu puoi determinare il valore commerciale dell'utilizzo di Qt. Se pensate che lo sviluppo multipiattaforma sarà una parte importante del vostro sviluppo, allora Qt potrebbe valerne la pena, nonostante i problemi citati.

+2

Ben spiegato, grazie! Penso che il licensing QT sia piuttosto liberale da quando Nokia ha preso il controllo. – Scott

+0

In questi giorni QT è licenziato sotto licenza LGPL 2.1, GPL 3.0 o commerciale, quindi è molto flessibile. LGPL è perfetto per le app commerciali, purché si seguano alcuni semplici requisiti (il collegamento dinamico semplifica molte cose). Vedi http://qt.nokia.com/products/licensing per i dettagli completi. – gavinb

+4

Inoltre, è possibile accedere alle API native in Qt e fare cose che "sconvolgono la mente". Quindi questa è una risposta piuttosto disinformata. – anno

1

A seconda del tipo di app che si desidera scrivere, un altro concorrente è REALbasic.

Il passaggio da C++ è piuttosto semplice (ho 15 anni di esperienza C++) e framework e IDE estremamente produttivi. Hai il vantaggio aggiuntivo di essere in grado di distribuire su Linux e Windows con uno sforzo banale.

Il grande motivo per imparare Cocoa e la codifica in Objective-C è se vuoi affinare le tue abilità iPhone o stai inseguendo un'esperienza utente davvero stravagante. Se volessi competere con lo sviluppo all'avanguardia di WPF, ti consiglierei Cocoa.

3

Attualmente sto sviluppando entrambi con QT (in realtà PyQT, ma non fa differenza per la tua domanda) e l'app Cocoa nativa. Per me non è un gioco da ragazzi, avevo scelto Cocoa. Vale veramente la pena di esplorare Cocoa in generale, ci sono molti grandi concetti all'interno del framework Cocoa e Objective-C 2.0.

+0

Il cacao sembra un'API forte. Il messaggio che passa la semantica sembra davvero avere un senso per l'UI/roba di callback. – Scott

+0

Se desideri esplorare Objective-C in modo più approfondito, ti consiglio di imparare Objective-C su Mac (http://www.apress.com/book/view/1430218150) e per Cocoa un libro classico è Cocoa (R) Programmazione per Mac (R) OS X (http://www.amazon.com/Cocoa-Programming-Mac-OS-3rd/dp/0321503619). –

1

NON utilizzare Qt per un'applicazione Mac. Non otterrai accelerazione hardware per il rendering 2D e non sarai in grado di garantire la conformità ADA.

+0

Nessuna accelerazione hardware? Questa è una preoccupazione piuttosto grande. – Scott

+0

Un'altra cosa che dovresti tenere a mente è che se hai bisogno di supporto tecnico, Apple supporta Cocoa. Apple non supporta Qt. – NSResponder

+0

Non ottieni la normale accelerazione OpenGL per i tuoi elementi dell'interfaccia utente 2D? – e8johan

3

Vorrei utilizzare Qt se si desidera che questa sia un'applicazione multipiattaforma.

+1

Le realizzazioni Mac OS delle mie app multipiattaforma sono merde. Non farlo Buone applicazioni mac sono fatte da mac negozi. –

2

Faccio un sacco di sviluppo multipiattaforma (Mac, Windows, Linux), e per alcuni progetti uso Qt. È una struttura fine e fornisce una ricca libreria di classi.Se è necessario distribuire su più piattaforme, non può permettersi di impiegare tempo/sforzi su front-end specifici della piattaforma, oppure il supporto "generico" per ciascuna piattaforma è sufficientemente buono, quindi utilizzare Qt.

Tuttavia, Qt inevitabilmente soffre in qualche modo della sindrome del minimo comun denominatore, e talvolta non si sente abbastanza abbastanza nativo. Ci sono anche alcune caratteristiche che sono difficili da supportare, o semplicemente non sono fornite nelle librerie Qt. Quindi, se puoi permetterti il ​​tempo e gli sforzi, o la tua app richiede davvero l'attenzione ai dettagli e la finitura &, allora lo sviluppo di front-end separati potrebbe valerne la pena.

In entrambi i casi, è necessario scrivere il codice back-end (ovvero dominio) in modo neutro rispetto alla piattaforma e front-end. In questo modo, il front-end può essere facilmente sostituito o modificato tra le piattaforme.

Si può sempre iniziare con un front-end Qt e andare per un breve tempo sul mercato, quindi sviluppare un front-end nativo lungo la linea.

In pratica, ho notato che un'applicazione Qt su Windows sembra più "nativa", mentre su Mac ci sono alcuni sottili segni rivelatori che lo fanno apparire/sentire non del tutto corretto. E gli utenti Mac tendono ad avere aspettative molto più alte quando si tratta di UI/UX!

+0

"Si può sempre iniziare con un front-end Qt e andare per un breve tempo sul mercato, quindi sviluppare un front-end nativo lungo la linea." Questa è una pessima idea. Hai solo una possibilità di fare la tua prima impressione. – NSResponder

5

Chiediti: quante delle migliori applicazioni Mac che conosci usano Qt invece di Cocoa nativo?

Per i nostri sistemi robotici, abbiamo originariamente scritto il nostro software di controllo in C++ utilizzando la libreria wxWidgets multipiattaforma (abbiamo evitato Qt a causa di alcuni problemi di licenza), perché ritenevamo di dover indirizzare piattaforme Windows, Linux e Mac per i nostri utenti finali. Questo è ciò che abbiamo spedito per oltre un anno fino a quando ho iniziato ad armeggiare con Cocoa.

Immediatamente, la cosa che mi ha colpito di più è stata la rapidità con cui è possibile sviluppare utilizzando Cocoa. Alla fine, abbiamo deciso di abbandonare il supporto per Linux e Windows e riscrivere le nostre intere applicazioni di controllo in Cocoa. Ciò che ci aveva portato anni a mettere insieme in C++ richiedeva solo tre mesi per reimplementare completamente in Cocoa.

Oltre ai problemi di interfaccia "minimo comune denominatore" che altri hanno sottolineato, il rapido sviluppo consentito da Cocoa è diventato un vantaggio competitivo per la nostra azienda. Il nostro software è avanzato molto più rapidamente dalla nostra conversione a Cocoa e ci ha permesso di diventare una nuova società con uno sviluppatore in grado di coinvolgere anche concorrenti di 10 anni con team di sviluppo di 20 persone. Questa sembra essere una storia comune nello spazio di sviluppo Mac, dove si vedono molti piccoli team che sono in grado di creare prodotti che competono con quelli di aziende molto più grandi.

Come nota finale, l'utilizzo di Cocoa ti dà la possibilità di rimanere aggiornato sulle nuove API che Apple sta continuamente sviluppando. Ora stiamo lavorando su una nuova interfaccia di controllo che farà un uso pesante di Core Animation, qualcosa che sarebbe doloroso affrontare usando Qt.

+5

Devo tuttavia notare che Qt è * way * più potente e completo di WxWidgets. Wx è molto limitato alla costruzione grafica dell'interfaccia utente, mentre Qt offre un intero ambiente applicativo tra cui parser, networking, audio, ecc. Come tale, Qt è molto più simile a Cocoa che a Wx. – bastibe

+1

Bella storia, ma non credo che il tuo successo abbia avuto molto a che fare con il passaggio all'API Cocoa. Come già sottolineato, wxWidgets ha funzionalità limitate. È molto probabile che Qt avrebbe fatto un lavoro uguale o migliore. Per quanto riguarda il rilascio del supporto per Linux e Windows, lo definirei un passo indietro. Il Mac, purtroppo, è un mercato molto piccolo. Sono piuttosto sicuro che il tuo successo derivasse dall'interfaccia pulita, reattiva e facile da usare e dall'aggiunta di alcune nuove funzionalità, tutte cose che puoi fare con Qt e C++. – Ignas2526

3

Puoi dare un'occhiata alla classe QMacCocoaViewContainer. Funziona come una specie di wrapper per le viste generiche di Cocoa, quindi puoi anche avere elementi Cocoa che non sono ufficialmente supportati da Qt.

Ovviamente questo significa imparare un po 'su Cocoa e Objective C e su come dovrebbe essere l'UI di Cocoa. Ma se già conosci bene Qt e se non è come se la tua applicazione riguardasse solo la GUI, questa potrebbe essere una buona strada da percorrere.

E non dimenticare lo QMacStyle::WidgetSizePolicy o non capirai perché i tuoi tavoli sono così grandi.

2

Da quando ho postato questo, ho imparato il modo Cocoa/Objective-C e sono rimasto molto colpito. Nonostante quello che inizialmente pensavo fosse una sintassi piuttosto bizzarra, Objc sembra essere un linguaggio molto efficace per implementare il codice UI, e lo zucchero XCode - cose come i Core Data e le associazioni - fanno un lavoro breve di tutti i bit noiosi.

Ho passato un po 'di tempo con gli esempi del QT e la documentazione prima di scavare nel cacao, e sono tendenzialmente d'accordo con ciò che è stato detto sopra essendo leggermente indietro rispetto alla curva e meno "aqua-ish" - anche se da un'ispezione abbastanza banale. Se dovessi assolutamente creare un'app multipiattaforma probabilmente userei QT piuttosto che cercare di separare il codice dell'interfaccia utente, poiché sembra che fornisca immagini visive abbastanza ravvicinate, ma solo per scopi mac, Cocoa sembra un vittoria definitiva.

Grazie a tutti per le vostre risposte, sono stati tutti molto utili!

3

Ovviamente, l'opzione migliore è utilizzare una suite multipiattaforma che supporti i widget nativi. Con QT4 puoi costruire la tua interfaccia utente di base. Quindi aggiungi solo il supporto nativo per la tua specifica piattaforma di destinazione.

Certo, il cacao ha un sacco di cose fantasiose (e puoi ancora usarle attraverso il QT4), ma vorrei essere chiaro. Vedo un sacco di fantastiche app su AppStore, belle, ma la maggior parte di allora sono solo schifo, costoso .. cosa mai. Ho davvero perso il mio editor di testo Kate, il mio visualizzatore okular, il mio software di disegno krita ... quelli sono solo migliori delle alternative commerciali e costose e sono gratuiti. quindi mi limito a modificare leggermente anche il codice sorgente e ho una vera esperienza nativa e ottima.

E se dovessi usare un'app linux sul mio computer principale con un mac os x? o Windows? o qualsiasi altra cosa? solo?

Ad esempio, perché mai dovrei acquistare un software di editor di immagini costoso, di fantasia ma di gran lunga meno dettagliato per il mio mac come pixelmator quando posso utilizzare un software di manipolazione di immagini reali completo come Gimp? Sì Gimp è basato su gtk2 che è un problema su qualsiasi piattaforma, specialmente su Mac perché è davvero brutto. Gimp dovrebbe essere portato su QT4. Inkscape dovrebbe essere portato su QT4 e sarebbe davvero fantastico.

È così semplice da fare .. Dio! http://doc.qt.nokia.com/4.7-snapshot/demos-macmainwindow.html Anche è possibile aggiungere il supporto per i menu la nuova funzione a schermo intero leone nativo, titolo unificato e delle barre degli strumenti, ecc

Io, come utente, mi interessa davvero applicazioni piattaforma efficiente, caratterizzato, buoni e croce, io don si preoccupano davvero della convenienza o della pigrizia degli sviluppatori.