Reimplementing Signals, Slots, Properties and Bindings from Qt in pure C++17

Speaker: Leon Mattes

Audience level: Advanced

If you had to describe the single most iconic feature of Qt, then signals and slots would undoubtedly come to mind for most. They are a foundational component of Qt that has been around for a very long time and forms the foundation for many of the design patterns that are common in Qt applications.

If you had to describe the single most iconic feature of QML on the other hand, then properties and property bindings would undoubtedly come to mind for most. Similar to signals and slots in “classic Qt”, property bindings arguably form the foundation for most design patterns in QML. And with QML still being Qt, property bindings are of course built on top of the signal slot mechanism.

Now even though Qt is a wonderful framework, there are naturally situations where using Qt isn’t ideal or simply not an option at all. This then poses a significant problem to those individuals who have signals, slots, and property bindings engraved into their fundamental approach towards writing software, i.e. Qt developers.

But fear not Qt developers who are deprived of your beloved Qt, we are proud to announce that we have developed KDBindings as a “pure C++” solution which offers signals, slots, properties, and bindings including optional deferred evaluation. All of this in an easy-to-integrate header-only library. We have leveraged the power of C++17 to implement this without the need for a preprocessor as used in the original Qt implementation of signals and slots. We believe that this is particularly important for the types of applications where using Qt is not an option.

Oh, and did we mention that we are releasing this as free software under the very permissive MIT license.