libqmlbind is a C library for creating QML bindings for other languages easily through exporting objects and classes to QML.
- Simple API to export objects / classes dynamically to QML
- Shared library with pure C interface
- Decouple your language bindings from Qt itself
- High portability
- Build with qmake
- No need to configure compilation flags for Qt manually
- All classes are defined as opaque C structs in
include/qmlbind/qmlbind_global.h
- For each class, there's a header file at
include/qmlbind/<classname>.h
which contains all methods defined on the class.
const type*
-pointers never transfer ownership.- Functions ending in
_new
are constructors, they transfer the ownership of the returned struct to the caller. - Functions ending in
_release
are destructors, they take ownership of their first argument, calledself
. - All remaining functions with
self
as first parameter are methods onself
, they never take ownership of it. - In all other cases, ownership of parameters and return value is explicitly stated in the comments.
You can install libqmlbind via Homebrew on Mac. (using a custom tap)
> brew tap seanchas116/libqmlbind
> brew install libqmlbind
For Arch Linux, you can find the latest release and the git master version of libqmlbind in the AUR.
- A C++11-capable compiler: libqmlbind is tested against
gcc 4.8.4
. - Qt5: libqmlbind is tested against
Qt 5.6
andQt 5.2.1
.
First, clone the repository with all its submodules:
> git clone --recursive git@github.com:seanchas116/libqmlbind.git
Alternatively, if you already cloned but forgot --recursive
, use this inside libqmlbind
:
> git submodule update --init --recursive
Use qmake to generate the Makefile
:
# if you want to use your default compiler:
> qmake -r
# if you want to use clang:
> qmake -r QMAKE_CC=clang QMAKE_CXX=clang
and then build it:
> make
From the main directory:
> cd test
> ./test -platform offscreen
Just run
> doxygen
from the project's main directory. You can then find the documentation in doc/html/index.html
.
If you're not happy with libqmlbind's interface or features, you might be interested in
DOtherSide, an alternative C library for creating QML bindings.
While libqmlbind was designed with dynamic languages like ruby in mind, DOtherSide was designed for static languages
like D. (You can use libqmlbind for static languages, too, though, you just won't need some parts of the API.
E.g. in dynamic languages, you can hand over a classObject pointer in qmlbind_metaclass_new
to implement a single
dynamic version of qmlbind_client_callbacks
for all classes, while in static languages, you would probably use
something like templates to generate many static variants of qmlbind_client_callbacks
for each class and hand over
them, not needing the classObject pointer at all).