如何为Qt-Applications提供脚本支持?

Dre*_*led 7 c++ scripting qt

我正在寻找可以集成到我的Qt5应用程序中的脚本语言.该应用程序有一个公共API,可用于通过插件扩展应用程序.现在我想在应用程序中添加脚本语言,以提供对整个公共API的访问.脚本语言必须满足以下要求:

  • 脚本代码可以在QT-Application中执行.
  • 用户可以访问文件系统,网络并从脚本语言创建图形元素.
  • 用户可以通过绑定访问我的QT应用程序的公共API.
  • 应该有一个生成器可以为我的公共api自动生成脚本语言绑定.
  • 对于属于Public Api的类,应该可以在QT-Application和Scripting Engine之间传递对象.

我评估了以下脚本语言:

  • Qt-Script和QT-Script Generator.
    脚本语言基于ECMAScript/Javascript,可以轻松集成到QT应用程序中.这符合我的所有要求,并按预期工作.生成器可用于为QT-Api本身生成绑定,并为我的应用程序的公共api生成绑定.遗憾的是,qt脚本模块将被弃用 qt5.5并且不再维护脚本生成器.
  • Python
    似乎有几个python-qt绑定可用.
    Pyside可能会好的,但它似乎也是不活跃的.除此之外,我必须将python嵌入到c ++中,pyside不支持开箱即用,但可以通过python c api完成.

您建议哪些脚本语言和工具满足我的所有要求?

Dre*_*led 2

SWIG与 Python 似乎是一个不错的选择。SWIG 仍在积极维护。

尽管 SWIG 并不能满足我开箱即用的所有要求,但让它们全部工作应该不是一件大事:

脚本代码可以从 QT 应用程序内执行。

开箱即用不支持此功能。您必须将 python 解释器嵌入到您的应用程序中。https://docs.python.org/2/extending/embedding.html

用户可以访问文件系统、网络并从脚本语言创建图形元素。

使用 python 访问文件系统和网络应该不是问题。要创建图形用户界面,有很多可用的库: https:
//wiki.python.org/moin/GuiProgramming

  • 用户可以通过绑定访问我的 QT 应用程序的公共 api。
  • 应该有一个生成器可以自动为我的公共 api 生成脚本语言绑定。

这是由 SWIG 完成的。它们提供了出色的 C++ 和 c++11 支持。

对于属于公共 Api 一部分的类,应该可以在 QT 应用程序和脚本引擎之间传递对象。

使用 swig 提供的 C++ 函数可以实现这一点:

  • SWIG_TypeQuery获取有关 C++ 类型的信息
  • SWIG_NewPointerObj将 c++ 对象转换为 python(代理)对象
  • SWIG_ConvertPtr将 python(代理)对象转换回 c++ 对象

更多信息请参见外部运行时章节