3 个不稳定版本
使用旧的 Rust 2015
0.1.1 | 2016年3月9日 |
---|---|
0.1.0 | 2016年2月7日 |
0.0.1 | 2016年2月6日 |
#712 in GUI
34KB
730 行
qmlrs - QtQuick 绑定库 for Rust
qmlrs 允许在 Rust 中使用 QML/QtQuick 代码,具体来说
- Rust 代码可以创建一个加载了 QML 脚本的 QtQuick 引擎 (QQmlApplicationEngine)
- QML 代码可以调用 Rust 函数
…但有一些限制。该库应该使用安全(即在 unsafe
中不使用),但目前没有保证。欢迎对代码进行审查。
新闻
查看 变更日志 以获取版本历史和待发布的主分支内容。
需求
该库由 Rust 部分 和 C++ 部分 组成。使用 Cargo 构建 C++ 部分将自动编译。您需要 cmake
、Qt5 和一个可以编译 Qt5 代码的 C++ 编译器。您的 Qt5 安装应至少包含以下模块:Core、Gui、Qml、Quick 和 Quick Controls。
如果您是从源代码安装 Qt5,请注意,将 "-noaccessibility" 传递给配置脚本将禁用 qtquickcontrols 模块。
使用方法
将 qmlrs 的最新版本从 crates.io 添加到项目的 Cargo.toml
。
示例
这是计算阶乘的应用程序的 Rust 代码。您可以在 examples
目录中找到相应的 QML 代码。
#[macro_use]
extern crate qmlrs;
struct Factorial;
impl Factorial {
fn calculate(&self, x: i64) -> i64 {
std::iter::range_inclusive(1, x).fold(1, |t,c| t * c)
}
}
Q_OBJECT! { Factorial:
slot fn calculate(i64);
}
fn main() {
let mut engine = qmlrs::Engine::new();
engine.set_property("factorial", Factorial);
engine.load_local_file("examples/factorial_ui.qml");
engine.exec();
}
要运行上述示例,请在项目的根目录中执行 cargo run --example factorial
。
有关 Qt 事件循环和线程的说明
创建 Engine
会自动初始化 Qt 主要事件循环(如果尚未存在)。至少在某些操作系统上,事件循环必须在主线程上运行。Qt 会告诉您是否出错。视图上的 .exec()
方法启动事件循环。这将阻塞线程,直到窗口关闭。
许可协议
此库中的代码根据 MIT 许可协议 和 Apache 许可协议(版本 2.0)双重许可。有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。
依赖关系
~47KB