2015-05-27 4 views
7

Sto cercando un linguaggio di scripting che possa essere integrato nella mia applicazione Qt5. L'applicazione ha una API pubblica, che può essere utilizzata per estendere l'applicazione con i plugin. Ora voglio aggiungere un linguaggio di scripting all'applicazione che fornisce l'accesso all'intera API pubblica. Il linguaggio di scripting deve soddisfare i seguenti requisiti :Come fornire supporto Scripting per Qt-Applications?

  • codice script può essere eseguito dall'interno del QT-Application.
  • L'utente può accedere al file system, alla rete e creare elementi grafici dal linguaggio di scripting.
  • L'utente può accedere alla API pubblica della mia applicazione QT tramite binding.
  • Ci dovrebbe essere un generatore disponibile per generare automaticamente collegamenti linguaggio script per la mia API pubblica.
  • Per le classi che fanno parte di Public Api, dovrebbe essere possibile passare oggetti tra l'applicazione QT e lo Scripting Engine.

Ho valutato il seguente script-Lingue:

  • Qt-Script, insieme con il generatore di QT-Script.
    Il linguaggio di scripting è basato su ECMAScript/Javascript e può essere facilmente integrato nelle app QT. Questo soddisfa tutti i miei requisiti e funziona come previsto. Il generatore può essere utilizzato per generare associazioni per lo stesso QT-Api e per generare associazioni per l'API pubblica della mia applicazione. Purtroppo il modulo qt-script sarà deprecato con qt5.5 e lo scriptgame è non più gestito.
  • Python
    Sembra che siano disponibili diversi collegamenti Python-qt.
    Pyside sarebbe probabilmente ok, ma sembra essere inattivo pure. A parte questo, dovrei incorporare python in C++, che non è supportato da pyside out of the box, ma potrebbe essere fatto da python c api.

Quali linguaggi di scripting e strumenti suggerite, che soddisfano tutte le mie esigenze?

+2

QJSEngine e le altre classi QML sostituire Qt-Script e dovrebbe essere in grado di soddisfare alcune (o tutte) le vostre esigenze, anche se l'applicazione non è originariamente basato su QML. –

+0

@PavelStrakhov Ho letto di questo. Ma la funzionalità è davvero limitata rispetto a qt-script. Dubito che lo scriptgenerator possa essere modificato per generare un risultato comparabile (usando qjsengine invece di qt-script). – Dreamcooled

+1

Solo ... QML .... –

risposta

1

SWIG con Python sembra essere una buona scelta. SWIG è ancora attivamente mantenuto.

Sebbene SWIG non soddisfa tutte le mie esigenze, fuori dalla scatola, non dovrebbe essere che una grande cosa per rendere tutti loro lavoro:

codice di script può essere eseguito dall'interno del QT -Applicazione.

Questo non è supportato dalla confezione. Devi incorporare un interprete Python nella tua applicazione. https://docs.python.org/2/extending/embedding.html

L'utente può accedere al file system, rete e creare elementi grafici dal linguaggio di scripting.

L'accesso al filesystem e alla rete non dovrebbe essere un problema con python. Per creare userinterfaces grafici, ci sono un sacco di librerie disponibili:
https://wiki.python.org/moin/GuiProgramming

  • L'utente può accedere alla API pubblica del mio QT applicazione attraverso associazioni.
  • Ci dovrebbe essere un generatore disponibile per generare automaticamente collegamenti linguaggio script per la mia API pubblica.

Questo è fatto da SWIG. Forniscono un ottimo supporto per C++ e C++ 11.

Per le classi che fanno parte della API pubblica, dovrebbe essere possibile passaggio intorno agli oggetti tra il QT-Application e il motore di scripting .

Ciò è possibile utilizzando il C++ funzioni fornite dal sorso:

  • SWIG_TypeQuery si ottiene informazioni sui tipi di C++
  • SWIG_NewPointerObj converte un oggetto C++ a un pitone (proxy) oggetto
  • SWIG_ConvertPtr converte un oggetto python (proxy) di nuovo nell'oggetto C++

Maggiori informazioni nel External runtime chapter