## Notes

Pass `-norc` on the command line to not load `~/.eclrc` on startup.
Since `:eql` and `:eql5` are in `*features*`, you can use e.g. `#+eql` / `#-eql5` as usual.

To run a Lisp file directly, do e.g. `eql5 examples/5-colliding-mice -qtpl`.

See the EQL UI (command `eql -qgui`) for a complete list of all supported classes and functions.

In the above mentioned UI you find a "Select" button, allowing you to select any Qt widget (even in other main widgets), if previously loaded from the UI command line. After selecting a widget, the parameter `qsel:*q*` will be set to it.

See command line option `-qtpl` for a top-level processing Qt events (see also readline note in `../README.txt`).
It uses a simple GUI dialog for debug input (needed because `read` runs in its own thread).
On eventual print output, you won't see a fresh prompt, but the REPL will remain ready for input.
You can set this option permanently by adding this in `~./eclrc`:
`#+eql (setf eql:*qtpl* t)`

If you want to use temporary Qt objects, you can use the `qlet` convenience macro (see the function list). It's a `let*` variant for Qt objects, deleting them when leaving its body.

No universal GC (garbage collection) for Qt objects:

- Qt widgets always live inside an object hierarchy, so deleting a widget will delete all its child widgets/objects.
- For local widgets/objects, you have the `qlet` macro, which are deleted when leaving the `qlet` body.

- So, always use `qlet` (instead of `qnew`) if you only need a local Qt object inside a function (e.g. `QPainter`, `QVariant`, `QRegExp`).
- GC is implemented (using the ECL finalizer) for Qt value types (like `QFont`) returned by the functions `qget` and `qfun`.
  These types are printed adding GC: `#<QFont 0x9243840 GC>`.

Enumeration example: `|Qt.AlignCenter|`.
So, all enumerations are defined as constants, using case preserving symbol names (allowing convenient tab completion in Emacs).

Errors in EQL functions don't break into the debugger; if you want them to do so, set the variable `eql:*break-on-errors*` to `T`.
(So the choice is left to you: depending on the situation, either option may be more convenient than the other.)

The currently available Qt5 Modules (see `qrequire`) are:
`:help :multimedia :network :quick :sql :svg :webengine :webkit`
(module `:opengl` is obsolete, see `QOpenGLWidget` etc.)

If you want to use CLOS together with `qt-object` instances (which are of type `struct`), see examples `X-extras/CLOS-encapsulation.lisp` and `5-colliding-mice.lisp`.
So there's a simple way to use either `defclass` or `defstruct` to encapsulate a `qt-object`.

If you're interested in embedding EQL in existing Qt/C++ projects, see example in directory `Qt_EQL/` (which can be used together with Slime).

See also plugin example in directory `Qt_EQL_plugin/`.

The necessary parsing for generating the `src/gen/*` files is done by parsing the Qt documentation. See `helper/README.txt` if you want do it yourself.