Need help with qmlrs?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

cyndis
432 Stars 41 Forks Other 109 Commits 15 Opened issues

Description

QtQuick interface for Rust

Services available

!
?

Need anything else?

Contributors list

# 321,709
Rust
linear-...
simd
C
48 commits
# 199,584
Rust
Shell
qtquick
Vim
19 commits
# 161,007
Ruby
C
Shell
libgit2
9 commits
# 71,535
merkle-...
Rust
db
gitlab-...
5 commits
# 264,112
Rust
C++
4 commits
# 632,266
Rust
C++
2 commits
# 131,294
Rust
brainfu...
exploit...
gzip
2 commits
# 57,251
Erlang
compile
sed
ml
1 commit
# 654,015
C++
C
1 commit

qmlrs - QtQuick bindings for Rust

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

Image of example

qmlrs allows the use of QML/QtQuick code from Rust, specifically

  • Rust code can create a QtQuick engine (QQmlApplicationEngine) with a loaded QML script
  • QML code can invoke Rust functions

…with certain limitations. The library should be safe (as in not

unsafe
) to use, but no promises at this time. Reviews of the code would be welcome.

News

See the Changelog for the version history and what's waiting in master to be released.

Requirements

The library consists of a Rust part and a C++ part. The C++ part will be compiled automatically when building with Cargo. You will need

cmake
, Qt5 and a C++ compiler that can compile Qt5 code. Your Qt5 installation should have at least the following modules: Core, Gui, Qml, Quick and Quick Controls.

If you are installing Qt5 from source, please note that passing "-noaccessibility" to the configure script disables the qtquickcontrols module.

Usage

Add the latest version of qmlrs from crates.io in your project's

Cargo.toml
.

Example

This is the Rust code for an application allowing the calculation of factorials. You can find the corresponding QML code in the

examples
directory.
#[macro_use]
extern crate qmlrs;

struct Factorial; impl Factorial { fn calculate(&self, x: i64) -> i64 { (1..x+1).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();

}

To run the above example, execute

cargo run --example factorial
in the project's root directory.

Note regarding the Qt event loop and threads

Creating an

Engine
automatically initializes the Qt main event loop if one doesn't already exist. At least on some operating systems, the event loop must run on the main thread. Qt will tell you if you mess up. The
.exec()
method on views starts the event loop. This will block the thread until the window is closed.

Licensing

The code in this library is dual-licensed under the MIT license and the Apache License (version 2.0). See LICENSE-APACHE and LICENSE-MIT for details.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.