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

时间:2015-05-27 11:37:55

标签: c++ qt scripting

我正在寻找可以集成到我的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-script模块将被强烈推荐,qt5.5并且脚本生成器不再维护
  • 的Python
    似乎有几个python-qt绑定可用 Pyside可能没问题,但似乎不活跃。除此之外,我必须将python嵌入到c ++中,开箱即用的pyside不支持它,但可以通过python c api来完成。

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

1 个答案:

答案 0 :(得分:1)

使用Python的

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

虽然SWIG并不能满足我的所有要求,但要让所有这些要求都有效,这不应该是一件大事:

  

脚本代码可以在QT-Application中执行。

不支持开箱即用。你必须在你的应用程序中嵌入一个python解释器。 https://docs.python.org/2/extending/embedding.html

  

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

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

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

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

  

对于属于Public Api的类,应该可以   传递QT-Application和Scripting之间的对象   发动机。

这可以使用swig提供的c ++函数:

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

External runtime chapter

中的更多信息