2015-05-27 21 views
7

Szukam języka skryptowego, który można zintegrować z moją aplikacją Qt5. Aplikacja ma publiczne api, które można wykorzystać do rozszerzenia aplikacji za pomocą wtyczek. Teraz chcę dodać język skryptowy do aplikacji, który zapewnia dostęp do całego publicznego api. Język skryptowy musi spełniać następujące Wymagania:Jak zapewnić obsługę skryptów dla aplikacji Qt?

  • kod skryptu mogą być wykonywane z poziomu aplikacji QT.
  • Użytkownik może uzyskać dostęp do systemu plików, sieci i tworzyć elementy graficzne z języka skryptowego.
  • Użytkownik może uzyskać dostęp do publicznego interfejsu API mojej aplikacji QT poprzez powiązania.
  • Powinien być dostępny generator umożliwiający automatyczne generowanie powiązań skryptów z moim publicznym interfejsem API.
  • W przypadku klas, które są częścią publicznego interfejsu API, powinno być możliwe przekazywanie obiektów między aplikacją QT a mechanizmem skryptowania.

I oceniano następujące skrypty Języki:

  • QT-Script, wraz z generatorem QT-Script.
    Język skryptowy jest oparty na ECMAScript/Javascript i można go łatwo zintegrować z aplikacjami QT. To spełnia wszystkie moje wymagania i działa zgodnie z oczekiwaniami. Generator może być użyty do wygenerowania powiązań dla samej QT-Api i wygenerowania powiązań dla publicznego api mojej aplikacji. Niestety moduł qt-script ma być przestarzały z qt5.5 i scriptgenerator jest nie jest już konserwowany.
  • Python
    Wygląda na to, że dostępnych jest kilka wiązań Python-QT.
    Pyside prawdopodobnie byłby w porządku, ale wydaje się być również nieaktywny nieaktywny. Poza tym musiałbym osadzić pythona w C++, który nie jest obsługiwany przez pyside po wyjęciu z pudełka, ale mógłby być zrobiony przez python c api.

Jakie języki skryptowe i narzędzia proponujesz, które spełniają wszystkie moje wymagania?

+2

QJSEngine i innych klas QML zastąpić QT-Script i powinny być w stanie spełnić niektóre (lub wszystkie) z własnymi wymaganiami nawet jeśli aplikacja nie jest pierwotnie na podstawie QML. –

+0

@PavelStrakhov Czytałem o tym. Ale funkcjonalność jest naprawdę ograniczona w porównaniu do qt-script. Wątpię, aby generator skryptów mógł zostać zmodyfikowany w celu wygenerowania porównywalnego wyniku (używając qjsengine zamiast qt-script). – Dreamcooled

+1

Po prostu ... QML .... –

Odpowiedz

1

SWIG z Pythonem wydaje się być dobrym wyborem. SWIG jest nadal aktywnie utrzymywany.

Chociaż SWIG nie spełnia wszystkie moje wymagania wyjęciu z pudełka, to nie powinno być tak, że wielka rzecz, aby wszystkie z nich działają:

kod skryptu mogą być wykonywane z poziomu QT -Podanie.

To nie jest obsługiwane po wyjęciu z pudełka. Musisz osadzić interpretera python w swojej aplikacji. https://docs.python.org/2/extending/embedding.html

Użytkownik może uzyskać dostęp do systemu plików, sieci i tworzyć elementy graficzne z języka skryptowego.

Dostęp do systemu plików i sieci nie powinien stanowić problemu z pythonem. Aby utworzyć userinterfaces graficznych, istnieje wiele bibliotek dostępne:
https://wiki.python.org/moin/GuiProgramming

  • Użytkownik może uzyskać dostęp do publicznych API mojego QT aplikacji poprzez wiązań.
  • Powinien być dostępny generator umożliwiający automatyczne generowanie powiązań skryptów z moim publicznym interfejsem API.

Dokonuje się tego za pomocą SWIG. Zapewniają doskonałą obsługę C++ i C++ 11.

Dla klas, które są częścią publicznych API, powinno być możliwe do przejściu wokół obiektów pomiędzy QT-application i skryptów Engine.

Jest to możliwe przy użyciu C++ funkcje przewidziane przez łykiem:

  • SWIG_TypeQuery dostaje informacje o C++ typów
  • SWIG_NewPointerObj konwertuje C++ obiektu do Pythona (proxy) obiektu
  • SWIG_ConvertPtr konwertuje obiekt python (proxy) z powrotem na obiekt C++

Więcej informacji w External runtime chapter

Powiązane problemy