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. For the complete list of marshalled types please see `toQVariant()` and `from_qvariant()` in [marshal.cpp](../src/cpp/marshal.cpp). Build ----- ``` $ cd cpp $ qmake $ 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.