A header-only library enabling Qt development without the MetaObject Compiler (moc) using compile-time macros.
Verdigris is a header-only C++ library that allows developers to use Qt without the MetaObject Compiler (moc). It replaces Qt's moc-specific macros with its own set, generating QMetaObject data at compile-time while maintaining full binary compatibility with Qt. This solves build system complexities and enables advanced C++ features like templated QObjects.
C++ developers working with Qt who face build system integration challenges, need templated QObjects, or want to avoid moc's limitations. Particularly useful for projects using non-Qt build systems or requiring advanced metaprogramming.
Developers choose Verdigris because it eliminates moc dependency, simplifies builds, and extends Qt with features like templated QObjects—all while remaining fully compatible with existing Qt libraries and tooling.
Qt without moc: set of macros to use Qt without needing moc
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Eliminates the need for Qt's moc, simplifying integration with non-Qt build systems like CMake or custom setups, as evidenced by the ISOTRONIC GmbH testimonial where migration took only a day.
Maintains complete compatibility with existing Qt libraries and tooling, ensuring seamless interoperability without breaking legacy code or dependencies.
Enables templated QObjects and nested QObject declarations, which are not supported by standard Qt's moc, as highlighted in the status section for extended functionality.
Generates QMetaObject data at compile-time, reducing runtime memory and initialization overhead compared to runtime alternatives like CopperSpice.
The project is no longer actively maintained, with the author moving on to other projects, posing risks for bug fixes, security updates, and compatibility with future Qt releases.
Missing key Qt features such as Q_PLUGIN_METADATA and QML_ELEMENT, limiting use in plugin-based or modern QML applications, as admitted in the README.
Q_ENUM functionality requires manually repeating the names of every enum value, adding boilerplate code and potential for errors compared to standard Qt.
Requires C++14 and specific compiler support (e.g., GCC 5.1, Clang 3.5, MSVC 2017), excluding older toolchains and adding complexity for heterogeneous development environments.