gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:39:32 25 4
gpt4 key购买 nike

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

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

我评估了以下脚本语言:

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

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

最佳答案

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

虽然 SWIG 不能开箱即用地满足我的所有要求,但让它们全部工作应该不是什么大事:

Script Code can be executed from within the QT-Application.

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

The user can access the file-system, network and create graphical elements from the scripting language.

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

  • The user can access the public api of my QT Application through bindings.
  • There should be a generator available to automatically generate script-language bindings for my public api.

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

For classes that are part of the Public Api, it should be possible to pass around objects between the QT-Application and the Scripting Engine.

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

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

更多信息在 External runtime chapter

关于c++ - 如何为 Qt 应用程序提供脚本支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30481342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com