Interfacing Qt/QML with OCaml. Formely known as lablqt
Let's write QML/QtQuick GUI for OCaml (or Reason) using lablqml!
In this repo you can find my work about integrating OCaml and Qt. Initially, I planned to generate binding code for OCaml and Qt Widgets and called this library
lablqt. But I found it hard to implement mostly because Qt relies on inheritance very much (we can't add onClick handler for button without inheritance). Later I decided to generate binding code for OCaml and QML/QtQuick. And I believe that QtQuick is the right way to create UI in Qt right now. See online book for getting started with Qt/QML itself
From 14th of February 2017 it's renamed from
lablqtto
lablqmlbecause it is actually about QtQuick and not QtWidgets or Qt itself. If you really need QtWidgets you can check out mrvn's work or def's.
Directories mapping:
ppx/.
lib.
dune_test. Use
make demoto build it.
duneas build system are in
demos/.
qocamlbrowser(ocamlbrowser with QtQuick instead of Tcl/Tk) is located in separate repo.
Github pages site and tutorial are available.
Use
./configure && maketo build it. Don't forget to install
g++and good Qt version (>= 5.3 I think,
./configurewill check for it, btw).
$ opam show lablqml --list-files /home/kakadu/.opam/4.07.0+fp+flambda/bin/ppx_qt /home/kakadu/.opam/4.07.0+fp+flambda/doc/lablqml/CHANGELOG /home/kakadu/.opam/4.07.0+fp+flambda/doc/lablqml/README.md /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/META /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/dune-package /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.a /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.cma /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.cmi /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.cmt /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.cmti /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.cmx /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.cmxa /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.cmxs /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.h /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.ml /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/lablqml.mli /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/liblablqml_stubs.a /home/kakadu/.opam/4.07.0+fp+flambda/lib/lablqml/opam /home/kakadu/.opam/4.07.0+fp+flambda/lib/stublibs/dlllablqml_stubs.so
There is a library here. It's fine to use it for simple programs
There is also
ppx_qtexecutable. It is used to generate C++ code from OCaml. See
demos/for examples
➜ cat a.ml
open Lablqmllet main () = () let () = run_with_QQmlApplicationEngine Sys.argv main "Root.qml"
➜ cat Root.qml
import QtQuick 2.0 import QtQuick.Controls 1.0ApplicationWindow { color: "#FFFFDF" // we declare rectangle with custom background color width: 400; height: 300; // with custom size Text { anchors.centerIn: parent text: "Click me!" } MouseArea { anchors.fill: parent // all space in parent Rectangle will be clickable } }
➜ ocamlfind opt -package lablqml a.ml -thread -linkpkg -cclib -lQt5Quick -cclib -lQt5Qml -cclib -lQt5Network -cclib -lQt5Widgets -cclib -lQt5Gui -cclib -lQt5Core -cclib -lstdc++ ➜ ./a.out
#thread;; #require "lablqml";;