Perché ' non ci sono più app desktop scritte con Qt? [chiuso]

Chiuso . Questa domanda è basata su opinioni . Attualmente non accetta risposte.

Commenti

  • È ' C ++ nativo. La maggior parte degli sviluppatori preferirebbe linguaggi di livello superiore come C #.
  • Larma a doppio taglio della retrocompatibilità ha lasciato Qt con molti anacronismi, difetti irrisolvibili e altri comportamenti scadenti.
  • @ user16764 : " La maggior parte dei "?
  • Non ' pensa lindice TIOBE è una misura molto accurata, perché misura la popolarità, non luso. Confrontando la quantità di codice in repository open source come GitHub, Bitbucket, Codeplex e Sourceforge darebbe misurazioni più accurate. (E credo che queste misurazioni più accurate mettano C e C ++ al primo e al secondo posto: Java ha un vantaggio ingiusto nellindice TIOBE perché ' è usato per i corsi di matricola , ei nuovi programmatori fanno più rumore di quelli esperti)
  • @Giorgio: Ehm, devi pensare a queste cose in C #. Il concetto di " che possiede questo " va ben oltre " chi chiama delete ". Il fatto che i puntatori intelligenti lo rendano esplicito non è ' un linguaggio che fallisce; e se ' non pensi a queste cose, genererai spazzatura in qualsiasi linguaggio di alto livello che ' ho visto anche tu.

Risposta

Non intendo davvero che questa sia una risposta irritante, ma questi sono i motivi per cui lo faccio non uso personalmente Qt. Ci sono molte cose positive da dire al riguardo – vale a dire che lAPI funziona la maggior parte del tempo e che collega perfettamente le piattaforme. Ma non uso Qt, perché:

  1. In alcuni casi, semplicemente non ha laspetto di programmi nativi. Progettare una singola interfaccia utente per tutte le piattaforme intrinsecamente non avrà un aspetto corretto quando viene spostato da una macchina allaltra, per vari motivi di stile visivo. Ad esempio, sui computer Mac, le barre divise sono generalmente relativamente spesse ei pulsanti sono piccoli e arrotondati con icone. Su macchine Windows, le barre divise sono generalmente strette e i pulsanti sono più testuali, con design più quadrati. Solo perché puoi scrivere una UI per ogni piattaforma non significa che dovresti farlo per la maggior parte delle applicazioni.
  2. Qt non è solo un insieme collegabile di librerie C ++. Il sistema di compilazione in uso richiede la traduzione di determinati file in file sorgente extra, il che rende il processo di compilazione molto più complicato rispetto alla maggior parte delle altre librerie.
  3. Come risultato di (2), IDE e strumenti C ++ può contrassegnare le espressioni Qt come errori, perché non comprendono le specifiche di Qt. Questo quasi obbliga luso di QtCreator o di un editor solo testuale come vim.
  4. Qt è una grande quantità di codice sorgente, che deve essere presente e preinstallato su qualsiasi macchina in uso prima della compilazione. Ciò può rendere la configurazione di un ambiente di compilazione molto più noiosa.
  5. Le parti sono per lo più concesse in licenza con LGPL, il che rende è difficile utilizzare la distribuzione a binario singolo quando è necessario rilasciare con una licenza più restrittiva o meno restrittiva.
  6. Produce binari compilati estremamente grandi rispetto a " plain ol “native applications " (eccetto ovviamente le applicazioni scritte ten per KDE).

Commenti

  • @Dehumanizer: There ' è il Licenza LGPL, e lì ' è la licenza commerciale. La licenza commerciale è di migliaia di dollari da parte del licenziatario e non consente la ridistribuzione, ecc. Per progetti open source con licenze liberali come BSD, MIT o Boost, dove gli autori sono ' t fare un sacco di soldi e desiderano rilasciare il loro codice con una licenza liberale, una dipendenza da LGPL è irragionevole, ma gli sviluppatori in questione generalmente non possono permettersi licenze commerciali.
  • # 6 è il più grande motivo lo evito. Voglio dire, ' t voglio un programma grosso e goffo e non ' mi piace essere vincolato a una licenza specifica, ma ' è davvero la mancanza di un buon aspetto nativo che ' è per me un problema.Le versioni recenti di OSX e Windows in particolare hanno svolto un lavoro fantastico nel rendere le loro interfacce native belle, veloci e funzionali, e io ' preferisco sfruttare tutto il lavoro che ' lho già fatto per me; Trovo che molti programmi senza un aspetto nativo mi sembrino economici e hacky (non sempre, ma mi sconcerta un po ).
  • Il tuo numero 6 avrebbe dovuto essere il numero 1. Questo è di di gran lunga il problema più grande con Qt. In molti casi, semplicemente non utilizza le API native. Mi piace che il mio software sembri nativo. Anche agli utenti piace. ' non ho mai visto unapplicazione Mac creata con Qt che assomigliasse a unapplicazione Mac. Nessuno dei due ha altri utenti Mac e ' sono schizzinosi su questo genere di cose. Perdi tutto il vantaggio di essere " multipiattaforma " se ' re usandolo solo per creare applicazioni Linux, che è quasi lunico posto in cui sembra nativo perché non cè davvero nulla di nativo.
  • tranne il problema del ' nativo ' look non è più presente. La vecchia consistenza delle app di Windows è ora un imbastardimento di qualsiasi blob, bagliore e animazioni unici che WPF e silverlight ti consentono di avere. Dai unocchiata al pannello di controllo di Office o Windows 7 ' solo per vedere come anche il prodotto di punta di MS al giorno doggi abbia una GUI incoerente. Utenti Mac – beh, hai un punto molto valido.
  • @TrevorBoydSmith: Scusa, ma ' ti sbagli. Qt è lunico framework che utilizza la preelaborazione. Periodo. Controlla GNOME, FLTK, WX e amici e mostrami un passaggio di pre-elaborazione. Non ' ne troverai uno. Alcune altre librerie vengono fornite con diversi sistemi di compilazione, ma alla fine sono librerie C ++ che possono essere compilate da qualsiasi compilatore C ++. Per quanto riguarda " Raw win32 non presente nelle mie ragioni ", è presente nelle mie ragioni come # 5 e # 6.

Risposta

Come si dice, ogni strumento si adatta a ogni problema e situazione …

Ma se sei un programmatore C ++, Qt è il tuo framework. Nessun rivale.

Sviluppiamo una complessa applicazione commerciale di imaging medico e Qt resiste.

Non lo dico i “contro” che le persone dicono al riguardo sono falsi, ma ho la sensazione che non abbiano provato Qt per molto tempo (sta migliorando continuamente su ogni nuova versione …) E, soprattutto tutti i problemi che commentano non sono un problema se ti prendi cura.

Incoerenza della piattaforma UI: solo se utilizzi i widget UI “così come sono”, senza personalizzazione o grafica personalizzata.

Sovraccarico del preprocessore Qt : Solo se si abusa del meccanismo di slot del segnale, o dellereditarietà di QObject, quando non ce nè davvero bisogno.

A proposito, scriviamo ancora applicazioni in C # .NET e siamo stati farlo per molto tempo. Quindi penso di avere una prospettiva enouch.

Come ho detto, ogni strumento per ogni situazione,

ma Qt è senza dubbio un framework utile e coerente.

Commenti

  • +1 Thaks! Volevo solo scrivere lo stesso. La cosa più assurda è " argomento non open source / commerciale ". Sorprendente, quante persone sbagliano capiscono il termine Open-Source. Qt era Open-source da quando lo uso (1.4). E una volta aveva la licenza più equa: guadagna denaro con Qt – > paga.
  • Oh, e io davvero non ' t ATTENZIONE allaggiunta di DLL da 10 MB allapplicazione contenente 50 MB di immagini e 200 MB in più di video tutorial e dati 🙂
  • Lo spazio necessario per Qt è poco costoso oggigiorno.
  • Questo corrisponde più o meno alla mia esperienza con Qt (il framework dei widget, non ho ' usato QML / QtQuick per niente di serio finora). È adatto per scrivere applicazioni di grandi dimensioni con requisiti di interfaccia utente complessi. Una volta imparato, puoi essere molto produttivo. Gli svantaggi menzionati (fase di compilazione separata per mocing, file ui, ecc.) Non sono un problema se il sistema di compilazione è impostato correttamente. Posso consigliare qmake o cmake.
  • da Qt 5.8 in seguito cè un progetto chiamato Qt Lite che minimizza estremamente Qt per le tue esigenze specifiche. questa è una caratteristica commerciale;)

Answer

Di tutte le cose che non mi piacciono di Qt, il fatto che non funzioni bene con i template mi disturba di più. Non puoi farlo:

template < typename T > struct templated_widget : QWidget { Q_OBJECT; public signals: void something_happened(T); }; 

Inoltre non funziona bene con il preprocessore. Non puoi “fare questo:

#define CREATE_WIDGET(name,type) \ struct name ## _widget : QWidget \ { \ Q_OBJECT; \ \ public signals: \ void something_happened(type); \ } 

Questo, unito al fatto che tutto ciò che risponde a un segnale deve essere un Q_OBJECT, rende Qt difficile da lavorare per un programmatore C ++. Le persone abituate alla programmazione in stile Java o Python probabilmente sono molto meglio in realtà.

In realtà ho speso molto tempo e impegno nella ricerca e nellideazione di un modo per recuperare la sicurezza dei tipi e collegare un segnale Qt a qualsiasi oggetto funtore: http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html

Il genere di cose che voglio fare è lo sviluppo C ++ di base, quotidiano, reso quasi impossibile da Qt moc … che a sua volta è del tutto inutile oggigiorno, se mai lo è stato.

Francamente, però, sono bloccato con esso perché se vuoi eseguire test automatici dellinterfaccia utente, Qt è praticamente lunico gioco in città a meno di MFC. ..che è così il 1980 (fa schifo lavorare in quella merda davvero difficile) Qualcuno potrebbe dire WX ma ha problemi ancora più seri. GTKmm sarebbe stata la mia prima scelta ma dal momento che è tutto disegnato dal proprietario e non fa accessibilità … non può essere guidato dal software di test standard del settore. Qt è abbastanza difficile a questo riguardo ( a malapena funziona quando modifichi il plug-in di accessibilità).

Commenti

  • Per interesse, quali sono i problemi principali con WX?
  • @Tom – scarsa documentazione, specialmente per le nuove cose. I componenti AUI sono a malapena documentati con grandi sezioni mancanti, il che rende difficile luso in un ambiente di produzione. La documentazione per il processo dellevento è fondamentalmente errata per quanto riguarda il percorso che viene seguito, almeno su win32. Ho passato molto tempo a urlare contro il computer, " dovrebbe funzionare !!! " prima di entrare nel profondo del codice di elaborazione per scoprire che ciò che fa WX non è ' seguire i documenti e quello che stavo facendo non avrebbe MAI funzionato.
  • Lo ero disturbato anche dallaccettazione della griglia di proprietà nella linea principale. Ho usato quella libreria e ha mostrato numerosi e fondamentali difetti di progettazione oltre alla reale mancanza di conoscenza da parte del programmatore che lha scritta (chiamate funzioni virtuali nei costruttori per esempio). Questo, e il cattivo stato dellAUI, hanno mostrato una tendenza a standard più poveri. Inoltre ' non sono un grande fan delle tabelle degli eventi statici, anche se almeno ' è un altro modo per rispondere agli eventi … a differenza di MFC, a cui WX è semplicemente troppo emozionante.
  • Grazie. Lho ' lho usato solo un po e tramite lAPI wxPython, dove mi è sembrato abbastanza carino. Posso capire che ciò nasconderebbe parte del male, ma anche che non sono ' abbastanza profondamente coinvolto da affrontare i problemi più seri. Qualcosa di cui essere a conoscenza.
  • tutto ciò che risponde a un segnale deve essere un Q_OBJECT, No oggigiorno … Ora, le funzioni statiche, le funzioni e persino le funzioni lambda possono rispondere a un segnale (è possibile utilizzare i puntatori a funzione come slot). Le classi No-QObject possono anche avere slot membri se ci si connette utilizzando un std :: bind per convertire il membro dellistanza in un puntatore a funzione.

Risposta

Un motivo per non usare Qt è che se scrivi solo per unarchitettura, come Windows, potresti voler usare C # /. NET (o Cocoa su Mac) perché invariabilmente essere in grado di sfruttare gli ultimi campanelli del sistema operativo.

Se stai scrivendo app multipiattaforma, potresti già essere fortemente investito in unaltra tecnologia come Java (ad esempio, lavori in un “Java Shop”). La tua scelta della tecnologia potrebbe essere dettata dallecosistema in cui stai sviluppando, come le API specifiche del linguaggio. In questi casi, ridurre al minimo il numero di tecnologie può essere utile.

Un terzo motivo a cui posso pensare è che Qt è basato su C ++ e C ++ è un linguaggio relativamente difficile / pericoloso da programmare in Penso che sia un linguaggio per professionisti. Se hai bisogno di prestazioni al top e sei capace di essere meticoloso, allora C ++ è probabilmente ancora il miglior gioco in città. In realtà, Qt migliora molti dei problemi di gestione della memoria se si impostano le cose in modo che non rientrino nellambito di applicazione. Inoltre, lo stesso Qt fa un buon lavoro isolando lutente da molti dei fastidiosi problemi di C ++. Ogni lingua e framework ha i suoi pro e contro. È un problema molto, molto complicato che di solito può essere riassunto dallaggiunta spesso vista nei commensali: velocità, qualità e prezzo (ma puoi sceglierne solo due).

Anche se le regole dicono che dovrei mantenere focalizzato sulla risposta alla domanda, desidero confutare alcune delle questioni sollevate da Billy ONeal, che penso faccia un buon lavoro riassumendo i motivi comunemente citati per non usare Qt:

  1. Qt è davvero una libreria / framework / file header C ++. È potenziato da un macro processore (moc) che abilita segnali e slot, tra molte altre cose. Trasforma comandi macro aggiuntivi (come Q_OBJECT) in modo che le classi abbiano introspezione e ogni sorta di altre chicche che potresti pensare come laggiunta di funzionalità Objective-C a C ++. Se ne sai abbastanza di C ++ da essere offeso da questa mancanza di purezza, ad es.sei un professionista, quindi 1) non utilizzare Q_OBJECT e simili o 2) sii grato che lo faccia e programma nei casi limitati in cui ciò causa un problema. Per le persone che dicono “Usa Boost per i segnali e slot! “, allora ribatto che stai scambiando un” problema “con un altro. Boost è enorme e ha i suoi problemi comunemente citati come scarsa documentazione, API orrende e orrori multipiattaforma (pensa ai vecchi compilatori come gcc 3.3 e grandi compilatori iron come AIX).

  2. Per il supporto delleditor, questo segue anche da 1, sono piuttosto daccordo. In realtà, Qt Creator è IMHO il miglior editor grafico C ++, punto , anche se non usi la roba Qt. Molti programmatori professionisti usano emacs e vim. Inoltre, penso che Eclipse gestisca la sintassi aggiuntiva. Quindi, nessun problema con le macro Qt (Q_OBJECT) o le aggiunte di segnali / slot. Probabilmente non troverai queste macro in Visual Studio, perché (lo ammetto) sono aggiunte a C ++. Ma in generale, le persone in C # /. NET non useranno comunque Qt, poiché hanno molte delle funzionalità coperte dalle proprie tecniche proprietarie.

  3. Per quanto riguarda la dimensione del sorgente Qt, fintanto che si compila dalloggi al domani, chi se ne frega? Ho compilato Qt 4 sul mio Macbook dual core in “meno di una notte”. utilizzare o non utilizzare una particolare tecnologia. Se questo è veramente un problema, è possibile scaricare gli SDK precompilati per Mac, Linux e Windows dal sito Web di Qt.

  4. La licenza è disponibile in tre scelte: 1) Licenza proprietaria nel caso in cui desideri modificare Qt SE STESSO e non condividerlo, o nascondere il fatto che si sta usando Qt e non si vuole dare attribuzione (potrebbe essere molto importante per il marchio e immagine!) 2) GPL e 3) LGPL. Sì, ci sono problemi con il collegamento statico (inserire tutte le Qt nel binario) – ma penso che sia più perché non si può sbirciare dentro e notare che lo sei u cantare Qt (attribuzione!). Ho provato ad acquistare una licenza proprietaria da Digia e mi hanno detto “per quello che stai facendo, non ne hai davvero bisogno”. Wow. Da unazienda che si occupa di vendita di licenze.

  5. La dimensione del pacchetto binario / è perché devi distribuire il materiale Qt a persone che non ce lhanno: Windows lo ha già? la roba di Visual Studio o devi installare il run-time. Il Mac viene già fornito con lenorme Cocoa e può essere collegato dinamicamente. Anche se non faccio molte distribuzioni, non ho mai riscontrato molti problemi con la distribuzione del file statico da ~ 50 megabyte (che posso rendere ancora più piccolo con alcune delle utilità di rimozione / compressione binaria come UPX). cura abbastanza da farlo, ma se la larghezza di banda fosse mai un problema, aggiungerei un passaggio UPX al mio script di build.

  6. Cosa definisce “Aspetto nativo?” Penso che “la maggior parte” concorderebbe sul fatto che il Mac si avvicina di più a un aspetto e un tocco unificati. Ma eccomi qui, a guardare Safari, iTunes, Aperture, Final Cut Pro, Pages, ecc. E non si assomigliano per niente nonostante siano prodotti dal fornitore del sistema operativo. Penso che laspetto “sentire” sia più rilevante: stile dei widget, reattività, ecc. Se ti interessa la reattività, ecco una buona ragione per usare C ++ piuttosto che Java, o qualche altro linguaggio altamente dinamico. (Anche lobiettivo C è eccezionale, ma sto cercando di dissipare i miti su Qt)

In sintesi, è una questione complicata. Ma vorrei sottolineare che penso che ci siano meno ragioni per “non usare Qt” come si potrebbe pensare sulla base di miti e informazioni obsolete.

Commenti

  • Quello che non ' t ottengo è perché queste librerie multipiattaforma non sono ' t semplicemente funzioni wrapper , o anche meglio; if defs attorno alle funzioni Cocoa, Win32, KDE / Gnome, assicurando la migliore interfaccia utente, con tutte le ' caratteristiche.
  • @MarcusJ Scrivere un wrapper in giro un toolkit è decisamente non banale, figuriamoci 4 o più, ma se ritieni che ' sia così facile, ' sei il benvenuto provare. Per quanto riguarda lidea che questo possa essere ottenuto utilizzando solo la preelaborazione condizionale … stai scherzando, vero?
  • @MarcusJ libui è esattamente questo (sebbene senza il supporto di KDE).
  • Voglio aggiungere che ora puoi usare Qt / QML con .NET. Non ' non è necessario toccare C ++. github.com/qmlnet/qmlnet PS: ' sono lautore.

Risposta

Alcuni sono concessi in licenza. Vedi https://en.wikipedia.org/wiki/Qt_(software) #Licensing per parte della cronologia delle licenze. Fino al 2000, le persone che tenevano molto allopen source, non utilizzavano Qt. Periodo. (Questa era, in effetti, la motivazione originale per lo sviluppo di Gnome.) Fino al 2005, le persone che volevano essere in grado di rilasciare software libero per Windows non usavano Qt.Anche dopo quella data, le persone che volevano il software libero sotto qualcosa di diverso dalla GPL, semplicemente non avevano la possibilità di usare Qt. Quindi qualsiasi progetto di software libero più vecchio di quelle date, non poteva usare Qt. E, naturalmente, le persone che scrivevano codice proprietario dovevano pagare per il privilegio.

Inoltre non è come se ci fosse un carenza di altre opzioni. Ad esempio WxWidgets , GTK + e Tk sono tutti toolkit open source e multipiattaforma.

Inoltre per molto tempo Windows è stato così dominante sul desktop che molti software si accontentavano di eseguire solo su Windows. Se installi la toolchain di Microsoft, è più facile usare solo materiale di proprietà di Microsoft che preoccuparsi di qualsiasi altra cosa, e molti programmatori lo hanno fatto.

Commenti

  • @btilly: GTK + è multipiattaforma. Ad esempio, il client Pidgin IM è scritto su GTK +.
  • Ok, tuttavia, è possibile ' in qualche modo ' per funzionare su Windows 🙂
  • Basta installare GIMP su Windows e dare unocchiata.
  • Sì, e GIMP funziona bene su Windows, ma certamente non ' t si adatta allinterfaccia utente di Windows 7 & feel.
  • Pidgin è probabilmente un esempio migliore di GTK su Windows. ' non fa nulla di stravagante, ma si adatta e ha forse 10 anni o più?

Risposta

Sono daccordo con quasi tutti i motivi discussi sopra, tuttavia molte persone qui hanno detto che non avrebbero usato Qt a causa del sovraccarico extra che porta con sé. Non sono daccordo con questo perché tutti i linguaggi più comuni oggi (Java, C # e Python) comportano un bel po di overhead.

In secondo luogo, Qt rende la programmazione con C ++ così semplice e diretta da compensare il risorse extra che usa. Mi sono imbattuto in un bel po di applicazioni console scritte in Qt piuttosto che in C ++ standard a causa della facilità con cui possono essere scritte.

Direi che la produttività di Qt è maggiore di quella di C / C ++ ma minore di linguaggi come Python.

Commenti

  • Immagino che ' sia tutto relativo allesperienza individuale ', perché posso codificare OK in C ++ 14, ma ogni volta che guardo un codice Qt, devo strizzare gli occhi per riconoscerlo come la stessa lingua … quindi certamente non ' lo penso ' è lacceleratore unanime della produttività che ' intendi qui.
  • @underscore_d ovviamente se conosci molto bene il C ++ e non ' t Qt, non sarai più produttivo con questultimo. Ma quando si conoscono sia C ++ che Qt, il framework rende davvero molte cose più facili e veloci da implementare (C ++ 11, 14 ecc. Stanno colmando il divario, ma non ancora del tutto).

Risposta

Questo sinceramente non è un tentativo di avviare una guerra con le fiamme, volevo solo affrontare alcuni dei punti.

Probabilmente il vero motivo per cui Qt non è più usato è che è C ++ e meno persone lo usano per le app desktop.

Qt non è una libreria C ++. Richiede un passaggio di compilazione separato, il che rende il processo di compilazione molto più complicato rispetto alla maggior parte delle altre librerie.

Il vs-addin per Visual Studio lo fa automaticamente come fa il processo di creazione da riga di comando di Qt. Anche il compilatore di risorse utilizzato per creare le finestre di dialogo per MFC è un passaggio separato, ma è ancora c ++.

Qt è una grande quantità di sorgenti, che deve essere presente e preinstallato su qualsiasi macchina in uso prima della compilazione. Ciò può rendere la configurazione di un ambiente di compilazione molto più noiosa.

È disponibile un download binario per ogni versione di Visual Studio e la compilazione dal sorgente sono un singolo comando. Non vedo che la dimensione del sorgente SDK sia un grosso problema in questi giorni. Visual Studio ora installa tutte le librerie C ++ invece di lasciarti scegliere, di conseguenza la dimensione di installazione del compilatore è> 1 GB.

It ” è disponibile solo con LGPL, il che rende difficile utilizzare la distribuzione a binario singolo quando è necessario rilasciare con una licenza più restrittiva o meno restrittiva.

La LGPL si applica solo alla lib, non influisce sul codice. Sì, significa che devi spedire le DLL piuttosto che un singolo binario (a meno che tu non paghi), ma in un mondo in cui devi scaricare un runtime Java o un aggiornamento .Net per una piccola utilità, questo non è un grosso problema. “è anche un problema minore su piattaforme con un singolo ABI, in modo che altre app Qt possano condividere le librerie.

In alcuni casi, semplicemente non” t sembrano programmi nativi.Progettare una singola interfaccia utente per tutte le piattaforme intrinsecamente non sembrerà corretto quando viene spostato da una macchina allaltra, per vari motivi di stile visivo.

Si suppone per utilizzare widget e temi nativi. Devo ammettere che mi occupo principalmente di applicazioni tecniche, quindi i miei utenti non sono troppo preoccupati per lo stile. Soprattutto su Windows, la nuova moda per avere tutto in stile come un widget per smartphone significa che comunque cè sempre meno uno standard.

Commenti

  • Molte grandi aziende di software creano applicazioni commerciali in C ++ ma ' non sono a conoscenza di molte che usano QT. Quindi, anche se capisco che gli sviluppatori non C ++ potrebbero evitare QT, ci sono altri motivi per evitare QT anche quando si scrive unapp C ++, sembrerebbe. In realtà, non esiste ' alcun linguaggio multipiattaforma e toolkit GUI con cui ' non posso trovare un difetto. Sembra che lo sviluppo multipiattaforma sia SEMPLICEMENTE DIFFICILE, e che farlo bene non sia mai facile o gratuito, e che la promessa fatta da QT (scrivi la tua GUI una volta e riutilizzala ovunque) non è ' t abbastanza.
  • La maggior parte del software C ++ desktop è in MFC perché è stato avviato 20 anni fa o utilizza un toolkit interno avviato 20 anni fa per evitare MFC (ad esempio MS-Office o Autocad). Dubito molto che venga scritto in C ++ / CLR con WPF. Ma anche senza considerazioni multipiattaforma trovo Qt il migliore (o meno peggiore!) Toolkit desktop. Come la maggior parte delle persone, ci stiamo muovendo verso un front-end webby (possibilmente in QtQuick / QML) e un server backend C ++ – che probabilmente utilizzerà segnali / slot Qt ma nessuna GUI
  • Sono daccordo. Almeno peggio. E anche su app solo Windows ' preferisco eseguire il debug dei problemi QT piuttosto che dei problemi MFC.
  • @WarrenP – sì, non ' non perdere la ricerca di codeproject per tutto ciò che manca da MFC. Ma con il nuovo amore per il codice nativo di MSFT ', non hanno ' fatto molto per rendere più semplice la scrittura di una gui.

Risposta

La ragione è semplice: non ha buoni collegamenti a tutte le lingue tradizionali e non è magicamente sempre appropriato per il lavoro da svolgere.

Utilizza lo strumento giusto per il lavoro. Se sto scrivendo una semplice applicazione a riga di comando, perché dovrei riempirla con Qt solo per il gusto di farlo?

Come risposta più generale (che posso dare perché sono rilevante qui ), alcuni programmatori semplicemente non lhanno mai provato e hanno deciso di usarlo. In alcuni casi non cè nessun motivo particolare a parte il fatto che il programmatore non ne ha mai trovato la necessità e lha esaminata.

Commenti

  • Ma Qt fornisce capacità di scrivere solo applicazioni console. ' non è vero?
  • @Dehumanizer: non ne ho idea. Ma perché dovrei usarlo per un piccolo strumento di utilità? Quale vantaggio mi porterebbe se potessi scrivere banalmente lapplicazione solo in C ++ standard? Sembra che ' stia cercando un motivo per utilizzare una libreria , che è un modo al contrario di programmare.
  • @Dehumanizer: As Ho detto che ' è un approccio allindietro. Quando trovi la necessità di una libreria, ' lo saprai, quindi puoi provarne qualcuna e vedere cosa si adatta meglio alle tue esigenze. Cercare di raccogliere opinioni su una libreria quando non ' non hai un caso duso è sciocco ' commissione.
  • " Se ' sto scrivendo una semplice applicazione da riga di comando, perché dovrei gonfiarla con Qt solo per il gusto di farlo " cè almeno un famoso strumento non gui scritto in Qt – Doxygen 🙂
  • @Dehumanizer per esempio quando hai a che fare con file, xml, unicode, json, regexp, concorrenza, database, ecc., molto velocemente e non ' vuoi scaricare, adottare, mantenere dozzina di terzi librerie di parti.

Rispondi

Framework come Qt sono appropriati quando sei più interessato allaspetto del tuo prodotto lo stesso su tutte le piattaforme che con il tuo prodotto che sembra giusto su tutte le piattaforme. Sempre più spesso in questi giorni, questo tipo di applicazioni si sta spostando verso tecnologie basate sul Web.

Answer

secondo me, imparare la programmazione C ++ è più semplice che cadere in altri linguaggi che nascondono la loro complessità e il programmatore non sa cosa accade davvero in background. Qt daltra parte, aggiunge alcuni vantaggi rispetto al C ++, per renderlo di livello superiore rispetto al C ++ nativo. Quindi Qt C ++ è un ottimo framework per chi vuole sviluppare attività di basso livello, o di alto livello, allo stesso modo. Il C ++ è (secondo alcune pratiche) un linguaggio complesso e semplice. Complesso per chi non vuole sfidarlo, semplice per chi lo ama.Non lasciarlo per la sua complessità!

Risposta

Sono daccordo che Qt sia un bel framework con cui lavorare. Tuttavia, ci sono una serie di problemi che ho con esso:

  1. È scritto in C ++, che è un linguaggio di livello davvero basso. Il solo fatto che sia C ++ renderà ogni programmatore Qt significativamente meno produttivo rispetto ai Framework scritti in altri linguaggi. Il mio problema principale con C ++ come linguaggio di sviluppo GUI è che non ha quasi nessuna nozione di gestione automatica della memoria, il che rende il processo di sviluppo molto più incline agli errori. Non è introspettivo, il che rende il debug molto più difficile. La maggior parte degli altri principali toolkit GUI ha una qualche nozione di gestione automatica della memoria e introspezione.
  2. Ogni toolkit multipiattaforma soffre del problema che può implementare solo il minimo comune denominatore di tutte le piattaforme supportate. Questo e le diverse linee guida dellinterfaccia utente su piattaforme diverse mettono in discussione lauspicabilità di GUI multipiattaforma nel suo complesso.
  3. Qt è molto incentrato sulla codifica di tutta la tua interfaccia utente. Anche se puoi usare QtDesigner per costruire alcune parti della tua interfaccia utente, è seriamente carente rispetto, ad esempio, a (Cocoa / Obj-C) Interface Builder o agli strumenti .Net.
  4. Anche se Qt include molte funzionalità di applicazioni di basso livello, non può essere paragonato a un framework personalizzato per una determinata piattaforma. Le librerie native del sistema operativo sia per Windows che per OSX sono significativamente più potenti delle implementazioni di Qt. (Pensa a framework audio, accesso a file system di basso livello ecc.)

Detto questo, mi piace usare PyQt per la prototipazione rapida di applicazioni o applicazioni interne. Luso di Python per eseguire tutta la codifica allevia i problemi con C ++ e rende effettivamente Qt un posto molto piacevole.


Modifica, in risposta ad alcuni commenti:

Quando ho scritto che Qt veniva scritto in C ++, non mi lamentavo tanto di Qt stesso , ma più sullambiente in cui vive. È vero che Qt gestisce molto bene le proprie risorse, ma tutto il codice relativo alla GUI ma non a Qt deve essere scritto anche in C ++. Anche lì, Qt ne fornisce molti strumenti carini, ma alla fine, devi avere a che fare con C ++ a quel livello. Qt rende C ++ sopportabile, ma è ancora C ++.

Per quanto riguarda lintrospezione, quello che intendo è questo: i casi più difficili da eseguire il debug sono quando tu avere un puntatore a qualche oggetto che non si comporta come pensi che dovrebbe. Con C ++, il tuo debugger potrebbe essere in grado di guardare un po dentro quelloggetto (se capita di avere informazioni sul tipo al punto), ma anche questo non sempre funziona. Prendi, invece, Cocoa nella stessa situazione. In Cocoa / Obj-C, saresti in grado di inviare messaggi (“funzioni di chiamata”) a un oggetto direttamente nel debugger. Puoi cambiare lo stato degli oggetti, puoi interrogarlo per i suoi attributi, puoi chiedergli il suo tipo ei suoi nomi di funzione … Questo può rendere il debug molto più conveniente. Qt / C ++ non ha nulla di simile a questo.

Commenti

  • 1. Qt si occupa da sola della gestione della memoria, non devi chiamare ' delete ' dopo ogni ' nuovo '. 1a. Il C ++ NON è un linguaggio di basso livello, è un linguaggio di alto livello con ' abilità '. 3. Accetto, ma Qt provvede a creare uninterfaccia utente con QtDesigner e con ' codice semplice ' nello stesso tempo. 4. Daccordo di nuovo, ma Qt prevede anche luso di API native.
  • al tuo punto nr 1. Penso che c ++ abbia una sorta di gestione della memoria semi-automatica: se usi puntatori intelligenti come std :: auto_ptr o boost :: shared_ptr ecc. generalmente non devi preoccuparti di liberare memoria. Questo tipo di contenitori può essere creato anche per altre risorse (file, risorse di sistema che devono essere liberate). Luso di RAII-pattern aiuta molto con la gestione della memoria e man mano che cresce dentro di te, non devi preoccuparti della memoria.
  • " Il solo fatto che è C ++ renderà ogni programmatore Qt significativamente meno produttivo rispetto ai Framework scritti in altri linguaggi. " [citazione necessaria]
  • @ SK-logic: Mentre penso Capisco tutte le parole della tua terza frase, non ho idea di cosa stai dicendo. Che cosè un " livello di limite di astrazione "? Del resto, la tua prima frase è falsa, data la definizione di Wikipedia di " linguaggio di basso livello ".
  • @ SK-logic: la metaprogrammazione dei modelli è completa per Turing e ci sono persone abbastanza intelligenti e competenti da trarne vantaggio. RAII non è ' una grande raccolta di rifiuti, ma il fatto che funzioni per tutti i tipi di risorse compensa più o meno quello.Ora, in particolare, che tipo di astrazione funziona in Java ma non in C ++?

Answer

La più importante ma cosa non menzionata. In un grande progetto una cosa causa tanti problemi e codice non necessario. I meccanismi di slot del segnale di Qt sono inefficienti. I widget Qt non forniscono i segnali necessari per i widget semplici di eventi. Ad esempio non è possibile impostare segnali per onHover, onMouseEnter, onMouseLeave, onKeyReleased, onLostFocus, onGainFocus e così via. Anche i widget più complessi come QTreeWidget fornisce uno o due segnali inutili ultra semplici.

Sì, puoi usare gli eventi MA !!! hai creato una nuova classe per ogni widget con un evento personalizzato. Questa è unenorme efficienza persa;

  • Hai riscritto ogni evento delloggetto widget personalizzato, ci sono piccole modifiche.
  • Perdi tutto il materiale di Qt Designer. Devi promuovere ogni widget con eventi personalizzati.
  • Il progetto è diventato più grande e difficile da mantenere.
  • Hai iniziato a non apprezzare qt per questo motivo. E iniziando a parlare di come .net fornisce delegati, di come è molto molto meglio dello slot di segnale, di come .net i componenti (widget) generalmente forniscono ogni evento che puoi immaginare. E così via

Uno dei miei ha scritto una nuova classe di casella combinata per ogni widget della casella combinata perché doveva usare un evento non di segnale. Storia vera …

Tuttavia, Qt è il miglior framework di interfaccia utente C ++ finora con alti e bassi.

Commenti

  • Per quanto riguarda gli eventi e la creazione di nuove classi: puoi usare i filtri degli eventi nelle classi che devono reagire ad essi.
  • " Sì, puoi usare gli eventi MA !! ! hai creato una nuova classe per ogni widget con evento personalizzato. Questa è unenorme efficienza persa; " – NON ESATTAMENTE. Ho appena finito con bool eventFilter che gestisce diversi widget e quindi installaEventFilter (questo) su tutti i widget figlio. E questo non è ' perdere efficienza e prestazioni di programmazione! In realtà non uso mai " Widget sponsorizzati " … Rilascio semplicemente un widget vuoto, lo installo come eventFilter su di esso e reimplementa la maggior parte dei i miei eventi allinterno della mia classe cpp principale. Provalo, non ' t pain 🙂 Puoi personalizzare quasi TUTTO in Qt senza creare nuove classi ogni volta

Rispondi

Mi piace molto Qt, ma “è un po pesante per molte applicazioni. A volte semplicemente non hai bisogno di quel livello di complessità. A volte hai solo bisogno di qualcosa di semplice senza tutto il sovraccarico di Qt. Non tutte le applicazioni devono essere guidate dagli eventi e C ++ fornisce una serie ragionevole di modelli. Boost fornisce un altro ottimo set e include molte delle funzionalità di basso livello (file, socket, puntatori gestiti, ecc.) Che QT fa.

Altre applicazioni hanno requisiti di licenza che non funzionano bene con la GPL , Licenza commerciale LGPL o Qt. La GPL non è appropriata per il software commerciale. La LGPL è inappropriata per il software collegato staticamente e la licenza commerciale costa denaro – qualcosa che molti non sono disposti a pagare.

Alcuni hanno considerazioni di sicurezza o stabilità che non consentono librerie complesse come Qt.

Devi eseguire moc per pre-elaborare i tuoi sorgenti. Non è un grosso problema, ma può essere scoraggiante per il nuovo utente. Molti programmatori pensano che necessiti di usare qmake con Qt, ma “è un termine improprio. È possibile collegare Qt ad altri sistemi di compilazione abbastanza facilmente.

Alcuni obiettivi sono molto memoria o CPU limitate.

Ci sono alcuni trucchi specifici della piattaforma. La maggior parte di questi trucchi non sono documentati. Crea unapplicazione sufficientemente grande e ti imbatterai in loro e ti chiederai cosa sta succedendo (disclaimer, il lultima volta che ho usato Qt con rabbia è stato più di 18 mesi fa, quindi potrebbe essere migliorato).

È solo C ++. Esistono associazioni di altri linguaggi, ma tendono a nascondere o esporre male gran parte del funzionalità per cui vorresti Qt.

Ci sono molti motivi per non usare Qt, ecco perché ci sono alternative. Se tutto ciò che hai è un martello, ogni problema sembrerà un chiodo.

Commenti

  • " La LGPL non è appropriata per il software [closed source] collegato staticamente " – che sembra essere impreciso, poiché in realtà LGPL e il collegamento statico sono legalmente possibili ( vedi ).
  • La tua posizione sembra corretta. Vedi gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynamic Ma è ' lavoro extra e cose extra da spedire. Puoi farla franca? Sì. Vuoi spendere lo sforzo? Forse no.

Risposta

La vera ragione non è tecnica.

Le persone capitano essere differente. Così sono le loro scelte. Luniformità non è una caratteristica umana.

Commenti

  • È per questo che tutte le persone camminano sulle proprie gambe? Beh, quelli che hanno le gambe almeno …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *