QML-rust - bindings for Qt Quick
Bindings are based on DOtherSide C bindings for QML Library is mostly feature-compliant with other bindings based on the library, but lacks some minor features and has quite a few bugs.
All examples are located in a folder examples/
, under example_name.rs
and example_name.qml
names.
cargo run --example properties
for setting properties from Rust to QML.cargo run --example listmodel
for an example of providing QML with list model from Rust.cargo run --example listmodel_macro
for the same example, but usingQ_LISTMODEL!
andQ_LISTMODEL_ITEM!
macro.cargo run --example sigslots
for an example of how to create your ownQObject
with signals and slots, and to communicate between QML and Rust. Also shows how to useQ_OBJECT!
macro.cargo run --example qobjects
for an example of how to useQ_OBJECT!
macro with different types.cargo run --example qvarlists
for an example of how to useqvarlist!
macro to easily formQVariant
(used to pass data to QML) of a complex array.cargo run --example threaded
for an example of multithreading.cargo run --example qmlregister
for an example of how to register and use your own types from Rust in QML.- An example in
examples/resources
(should be run manually bycargo run
) shows how to use qrc resources.
Requires CMake, Make, Qt (Core, Gui, Widgets, Quick), pkg-config (only for OS X and GNU/Linux) and, of course, Rust.
To run tests: RUST_TEST_THREADS=1 cargo test
- Architect - an app showing some git stats, using qml-rust to provide properties and lists to QML in here.
- Kefia - A simple package manager, that provides a QListModel to QML, registers a QObject with slots and communicates between QML and Rust, here.
Done:
- Basic initialization and execution.
- Providing properties to QML files.
- QAbstractListModels - provides changable models for QML items (early draft, still lacks proper mutability).
- QObjects: slots, signals (limited properties support). Emitting signals and receiving slots works.
- Registering your own QML types (singletons or not) from Rust code.
To be done:
- the library is mostly done, but some stuff is lacking polish, like possible memory leaks or better macro designs.