lqml/cpp-lib
2022-02-22 16:59:09 +01:00
..
cpp add 'ensure-permissions' for android; revisions 2022-02-22 16:10:55 +01:00
readme.md update cpp-lib readme 2022-02-22 16:59:09 +01:00
run.lisp add header for calling ECL from Qt plugins; add cpp-lib example call; revisions 2022-02-21 13:30:22 +01:00

Info

Please see run.lisp, which should be self explaining.

If you want to call Lisp from your Qt plugin, just include ecl_fun_plugin.h, which is independent from LQML, so you could even use it in Qt projects not linking the LQML library.

Function ecl_fun() is convenient because you don't need to care about type conversions, as long as you only use bool, long, double, QString, QByteArray or (nested) QVariant lists of mentioned types.

Build

$ cd cpp
$ qmake lib.pro
$ make
$ cd ..

Run

$ lqml ~/slime/lqml-start-swank.lisp
$ emacs run.lisp

After M-x slime-connect and loading run.lisp, you can see that, despite the argument and return type simply being defined as QVariant, you may also pass lists, because a QVariant can also be of type QVariantList, so this is a perfect fit for (nested) Lisp lists.

So, we pass a nested Lisp list, and it gets converted and shown on Qt side with the respective types. Then the QVariantList is returned to Lisp, where it is automatically converted back to a nested Lisp list.