SmokeQt6

March 16, 2026 · View on GitHub

SMOKE (Scripting Meta Object Kompiler Engine) bindings for Qt 6. This project generates language-independent introspection libraries that expose Qt 6 classes, methods, and enums through a flat C interface, enabling language bindings such as QtRuby, PerlQt, and CommonQt (Lisp) to call into Qt without hand-written wrapper code.

Supported Qt 6 Modules

ModuleLibraryQt Component
QtCoresmokeqt6coreCore non-GUI classes
QtGuismokeqt6guiGUI primitives (images, fonts, painting)
QtWidgetssmokeqt6widgetsDesktop widget toolkit
QtNetworksmokeqt6networkNetworking (TCP, UDP, HTTP, SSL)
QtOpenGLsmokeqt6openglOpenGL integration
QtPdfsmokeqt6pdfPDF rendering
QtPrintSupportsmokeqt6printsupportPrinting support
QtQmlsmokeqt6qmlQML engine
QtQuicksmokeqt6quickQt Quick scene graph
QtQuickWidgetssmokeqt6quickwidgetsEmbedding Quick in Widgets
QtSqlsmokeqt6sqlSQL database access
QtSvgsmokeqt6svgSVG rendering
QtWebChannelsmokeqt6webchannelWeb channel communication
QtWebEnginesmokeqt6webengineChromium-based web engine
QtWidgetssmokeqt6widgetsWidget toolkit
QtXmlsmokeqt6xmlXML parsing

Optional/disabled modules: QtDBus, QtHelp, QtMultimedia, QtMultimediaWidgets, QtPositioning, QtScxml, QtSpatialAudio, QtTest, QtUiTools, Qt3DAnimation, Qt3DCore, Qt3DExtras, Qt3DInput, Qt3DLogic, Qt3DRender, QScintilla, Qwt.

Prerequisites

  • CMake >= 3.22
  • C++17 compiler (MSVC 2019+, GCC, or Clang)
  • Qt 6 (6.x, tested with 6.11)
  • smokegen — the SMOKE code generator (must be built first, expected at ../smokegen/)

Building

SmokeQt depends on smokegen, the code generator. Clone and build it so that its CMake config and binary are available:

mkdir build && cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=\path\to\install -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL -DSMOKE_QT_VERSION=6 -DQt6_DIR=\path\to\qt6\lib\cmake\Qt6 -DLLVM_DIR=\path\to\llvm\lib\cmake\llvm
ninja -j 6
ninja install

On Windows, run the cmake commands from an x64 Native Tools Command Prompt. The Visual Studio generator can be used instead of Ninja if preferred, but Ninja is recommended for faster incremental builds.

Installed Artifacts

  • Shared libraries: smokeqt6core, smokeqt6gui, smokeqt6widgets, etc. → <prefix>/lib/ (Unix) or <prefix>/bin/ (Windows DLLs)
  • SMOKE headers: qt6core_smoke.h, qt6gui_smoke.h, etc. → <prefix>/include/smoke/
  • Metadata files: *.argnames.txt, *.typedefs.txt<prefix>/share/smoke/
  • Qt config: qt-config.xml<prefix>/share/smokegen/

License

GNU General Public License v2 (see COPYING).