2013-03-14 7 views
24

Sono un principiante in Qt-Quick. Non sono a conoscenza di Qt che è una base per QML. E inoltre non ho familiarità con C++, che è di nuovo il linguaggio principale supportato sia per Qt che per QML. Sono consapevole che JS può fare molta logica nello stesso strato QML. Ma se abbiamo bisogno di interazioni con il sistema operativo, allora dobbiamo usare un linguaggio di base. Come mi sento a mio agio con Python, sto pianificando la combinazione "QML-JS-Python".Python funziona bene con QML (Qt-Quick)?

Quindi, le mie domande:

  1. per applicazioni avanzate e sviluppo gioco non Python & Qt-Quick fanno parte bene in mano?
  2. Il mio Trio Combinato (QML-JS-Python) è abbastanza buono per questo?
  3. E ho bisogno di imparare Qt per lo sviluppo di app per l'accoppiamento con Python da QML?
  4. Se sì per Qust 3, allora dovrei imparare Qt completo o solo quelle poche righe di codice che fungono da porta di comunicazione tra Python e QML?

Scusate se sono stupido nel proporre queste domande. Ma vorrei prendere suggerimenti e opinioni.

Edit: eventuali limitazioni questa combinazione QML-JS-Python

Grazie in anticipo

+0

Perché non lo tenga a JS: basta un linguaggio dinamico e JS offre prestazioni migliori rispetto a Python. Per Qt è necessario C++ per estendere QML e JS per unire i componenti QML. Python in questo contesto è uno strumento ridondante. – dtech

+6

Si può estendere QML con componenti Python. Secondo l'argomento della ridondanza, tutte le lingue tranne l'assemblatore sono ridondanti. JS e Python sono distintamente non equivalenti. Avere una logica di programma seria al di fuori di QML è potenzialmente un'ottima cosa. –

+0

@ddriver, come ho detto nella domanda, per stabilire una comunicazione con il sistema operativo per alcuni problemi specifici abbiamo bisogno di un linguaggio di base. Quindi, preferisco Python come Im poco familiare. – inblueswithu

risposta

28

Sul piano concettuale, vanno molto bene insieme. Ho scritto un programma python/qml/js/opengl che combina tutto abbastanza bene. Era con Qt4.7 e PySide.

Se si sta semplicemente utilizzando QML, è possibile ridurre al minimo la quantità di Qt a cui è necessario essere esposti (sebbene, come sempre, più conoscenze rendano più potenti). Essenzialmente, una volta che hai una qdeclarativeview, il tuo lavoro di Qt è fatto a parte la gestione del segnale/slot, che è una gioia sotto PySide. Suggerirei di essere produttivi rapidamente usando Python e QML senza preoccuparsi troppo del lato Qt delle cose, raccogliendolo come necessario.

Per esperienza, suggerisco di rendere chiara la demarcazione tra Python e QML nella propria mente. Ho limitato molto il QML alla logica della GUI, cosa che fa molto bene; in effetti il ​​QML gestisce come l'interfaccia risponde agli input e quindi invia segnali al programma principale. Funziona un po 'come creare un'interfaccia di base molto semplice tra il gui e il resto del programma, solo segnalando la logica di alto livello (piuttosto che, ad esempio, inviando un clic, invierebbe un segnale che dice per esempio " accendi l'elaborazione ", il gui si occuperebbe di come rendere quel cambiamento). Nel mio caso, questo è appena collegato direttamente al mio framework MVC, ma puoi farlo come preferisci.

C'è un grosso avvertimento in tutto questo. Lo sviluppo di PySide è piuttosto in stallo e attualmente non supporta Qt5 e tutta la sua bontà di miglioramento QML. Ci sono state varie discussioni su come dovrebbe essere supportato, ma non molto impegno sul codice reale.

Credo che PyQt supporti Qt5, ma con licenza doppia come GPL o commerciale (PySide è LGPL quindi può essere utilizzato con codice sorgente chiuso). Non ho esperienza di PyQt, a parte il fatto che PySide è approssimativamente in calo nelle sostituzioni per l'un l'altro.

Modifica: Sembra che sto parlando di usarlo come MVVM.

Modifica (qualsiasi domanda con limitazioni): l'intero Qt è esposto tramite PySide e PyQt. Ciò significa che puoi scrivere estensioni in Python come faresti in C. Ho scritto un widget che ha catturato gli eventi di scorrimento del mouse in modo da poter rubare lo scroll da un Flickable. Questo era un elemento QML creato in Python, anche se dovevo caricarlo anche da Python; Non riuscivo a capire come creare un'estensione che potrei caricare dall'interno del documento QML. Ovviamente è possibile scrivere un'estensione C che è indipendente dal codice principale, quindi hai sempre quell'opzione.

+0

Grazie per la risposta chiara. Potete per favore suggerirmi dove dovrei usare JS e Python. Dovrei usare Python completamente eliminando quasi JS anche per funzioni semplici? – inblueswithu

+5

Dall'esperienza professionale, aggiungerei che mentre PySide è bello con cui lavorare, ha alcuni buchi notevoli che possono apparire e accecarti quando meno te lo aspetti. Il notevole che mi ha infastidito è stata l'impossibilità di creare segnali in Python che possa utilizzare la normale logica di collegamento del segnale e avere i parametri denominati passati. Devi usare un hack e connetterti sempre a questi segnali tramite javascript per poter accedere al parametri nella funzione del gestore. Essenzialmente dopo un paio di mesi di sviluppo, desideriamo davvero che fossimo in C++ a causa dei vari problemi. – Deadron

+0

@Deadron, So. Ho capito dalla tua esperienza che Python non interagisce perfettamente con QML. Ci sono ostacoli che possono seriamente influenzare lo sviluppo. Accettate con questo? – inblueswithu

5

A partire da aprile 2016 PySide è now ufficialmente supportato dalla società Qt.

L'home page ufficiale è here. Le licenze LGPL sono un'opzione, che sembra essere la ragione principale per cui il progetto è stato creato in primo luogo.