#qt #qml #qt-quick

qmlrs

qmlrs - Rust 的 QtQuick 绑定

3 个不稳定版本

使用旧的 Rust 2015

0.1.1 2016年3月9日
0.1.0 2016年2月7日
0.0.1 2016年2月6日

#712 in GUI

MIT/Apache

34KB
730

qmlrs - QtQuick 绑定库 for Rust

Travis Build Status Coverage Status MIT licensed Apache licensed crates.io

Image of example

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-APACHELICENSE-MIT

依赖关系

~47KB