描述
QtLua 库旨在使用 Lua 脚本语言使 Qt4/Qt5 应用程序可编写脚本。它是 QtScript 模块的替代品。
QtLua 不会为 Qt 生成或使用生成的绑定代码。相反,它提供了有用的 C++ 包装器类,使 C++ 和 lua 对象都可以从 lua 和 C++ 访问。它利用 Qt 元对象系统将 QObject 成员公开给 lua 脚本。
QtLua 不是为了在纯 Lua 中开发应用程序而设计的,而是使用 Lua 作为脚本语言来扩展 Qt C++ 应用程序。
特征
基本功能:
基于 Lua 堆栈的 C API 未公开,仅从 C++ 代码中操作 QtLua::State 和 QtLua::Value 等 C++ 对象。
由于 C++ 运算符重载,可以从 C++ 访问与 Lua 中几乎相同的简单语法。
通过从 QtLua::UserData 类继承,可以将 C++ 对象作为 userdata 值公开给 Lua。所有 Lua 元操作都可以通过覆盖虚函数来重新定义,包括对 Lua 中的 userdata 对象的迭代。
QtLua::Ref 智能指针类支持对基于 QtLua::UserData 的对象的引用跟踪,并且可以使这些 C++ 对象可进行垃圾回收。
QtLua::Iterator 包装器类允许使用通常的 C++ 迭代器来遍历 Lua 表之类的值。Lua 迭代器还可用于从 Lua 脚本遍历基于 QtLua::UserData 的 C++ 对象。可以使用可用的容器代理类之一直接从 Lua 访问 Qt 模板容器。
QtLua::Function 类可以被子类化,以轻松定义可从 Lua 调用的 C++ 函数对象。QtLua:😛 lugin 类允许编写可能包含 QtLua::Function 对象的 Qt 插件。
支持 Lua 协程,并可用于从 Qt 应用程序中的 Lua 脚本控制并行作业。
QObject 相关功能:
Qt QObject 包装允许从 Lua 创建和操作 QObject 对象。
QObject 属性、枚举、插槽和子对象可以从 Lua 访问。Qt Signals 可以直接连接到 Lua 函数。
qt Lua 库可用,其中包含用于创建 QObject 和管理来自 Lua 的信号/插槽连接的函数。
基于 QObject 的用户类可以在 QtLua 元对象列表中注册。这允许实例化用户类并直接从 Lua 脚本和 .ui 文件访问枚举值。
用户定义的 Qt 类型可以与用户定义的转换函数一起注册。这允许 QtLua 在调用 Qt 插槽或访问 QObject 属性时在 Qt 用户类型和 Lua 值之间执行透明转换。
Qt Widgets 和用户界面功能:
qtLua_uic工具可用于将 Qt .ui 用户界面文件编译为 Lua 脚本。一些 Qt 函数也被包装起来,以便能够直接从 Lua 加载 .ui 文件。
Qt QtLua::Console 小部件是一个控制台小部件,具有历史记录和 Lua 表完成功能。qtLua 工具基于此小部件,并提供基于 Lua 的 shell 用于实验。
qt Lua 库包装了一些重要的用户界面功能,这些功能无法通过 Qt 元对象系统直接获得。
Qt Model/view 相关功能:
QtLua::UserItemModel 类支持开发分层 C++ 数据结构,可从 Lua 脚本和 Qt 视图小部件中编辑。
QtLua::TableTreeModel 和 QtLua::TableGridModel 类可用于向 Qt 视图公开 Lua 表。
QtLua::LuaModel 类允许在纯 Lua 中实现 Qt 模型。
QtLua::ItemViewDialog 类为模型数据显示和编辑提供了一个通用对话框。它可以与各种视图一起使用,并具有可自定义的编辑按钮。
qt Lua 库包含一些函数,允许从 Lua 实例化 MVC 相关模型和对话框。
QtLua 2.0 已通过 Lua 版本 5.0、5.1 和 5.2 以及 Qt 版本 4.8 和 5.0 的测试。