Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为Qt应用程序提供脚本支持?_C++_Qt_Scripting - Fatal编程技术网

C++ 如何为Qt应用程序提供脚本支持?

C++ 如何为Qt应用程序提供脚本支持?,c++,qt,scripting,C++,Qt,Scripting,我正在寻找一种脚本语言,它可以集成到我的Qt5应用程序中。该应用程序有一个公共api,可用于使用插件扩展应用程序。现在我想向应用程序添加一种脚本语言,它提供对整个公共api的访问。 脚本语言必须满足以下要求: 脚本代码可以在QT应用程序中执行 用户可以通过脚本语言访问文件系统、网络和创建图形元素 用户可以通过绑定访问我的QT应用程序的公共api 应该有一个生成器可以为我的公共api自动生成脚本语言绑定 对于作为公共Api一部分的类,应该可以在QT应用程序和脚本引擎之间传递对象 我评估了以下脚

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

  • 脚本代码可以在QT应用程序中执行
  • 用户可以通过脚本语言访问文件系统、网络和创建图形元素
  • 用户可以通过绑定访问我的QT应用程序的公共api
  • 应该有一个生成器可以为我的公共api自动生成脚本语言绑定
  • 对于作为公共Api一部分的类,应该可以在QT应用程序和脚本引擎之间传递对象
我评估了以下脚本语言:

  • Qt脚本,以及Qt脚本生成器。
    脚本语言基于ECMAScript/Javascript,可以轻松集成到QT应用程序中。这满足了我的所有要求,并按预期工作。生成器可用于为QtaPI本身生成绑定,并为我的应用程序的公共Api生成绑定。遗憾的是,qt脚本模块将被弃用于qt5.5,而scriptgenerator将不再维护
  • Python
    似乎有几种python qt绑定可用。
    Pyside可能还可以,但它似乎也处于非活动状态。除此之外,我必须将Python嵌入C++中,它不被PySeNox所支持,但是可以由Python C API来完成。
您建议使用哪些脚本语言和工具来满足我的所有需求?

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

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

脚本代码可以在QT应用程序中执行

这是不支持开箱即用的。您必须在应用程序中嵌入python解释器

用户可以通过脚本语言访问文件系统、网络和创建图形元素

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

  • 用户可以通过绑定访问我的QT应用程序的公共api
  • 应该有一个生成器可以为我的公共api自动生成脚本语言绑定
这是由SWIG完成的。它们提供了强大的C++和C++ 11支持。
对于作为公共Api一部分的类,应该可以 在QT应用程序和脚本之间传递对象 引擎

这是使用Sigg提供的C++函数:

  • SigigyType查询获取有关C++类型
  • 的信息
  • SigigNeNoPotoObjoc将C++对象转换为Python(代理)对象< /LI>
  • SigigUnCurruttPtR将Python(代理)对象转换回C++对象

QJSEngine和其他QML类中的更多信息将取代Qt脚本,即使应用程序最初不是基于QML,也应该能够满足部分(或全部)需求。@PavelStrakhov我读过这方面的内容。但与qt脚本相比,该功能确实有限。我怀疑scriptgenerator是否可以修改以生成类似的结果(使用qjsengine而不是qt脚本)。它甚至附带了许多到现有Qt类的绑定。它允许您的用户轻松创建新的UI!QML不能满足我的所有要求。用户无法直接访问文件系统和网络。此外,脚本引擎只能使用基于QObject的类。