A long time ago (in early 2019, according to the commit log), I took up the quixotic task of building a custom desktop environment based on Qt.
What I have in mind is still vague, but essentially I want a thin, beautiful, customizable, wrapper around i3wm. Think "KDE window manager". Yes, I know, a window manager is not a desktop environment is not a window manager.
A necessary building block for such a project is obviously integration of i3wm's IPC with Qt. A handful of C++ libraries already exist for interprocess communication with i3wm. However, integrating them with Qt tends to require quite a lot of boilerplate. None of them could be integrated in a way that feels clean enough to my taste, so I decided to build my own library to do just that.
The result is qi3pc. A simple C++ library that provides idiomatic Qt bindings for i3wm's IPC interface.
The messages, replies and events that i3wm's IPC API provides are accessible through methods and signals with obvious names. Getting information from i3 is as simple as sending a message and waiting for a reply or subscribing to events and waiting for them to be triggered. This is done with the signal/slot mechanisms offered by Qt and normal C++ functions.
The signals and methods return objects (arrays, dictionaries, strings, etc.) matching the specifications of i3wm's IPC protocol
The documentation website is available here. Once installed, the docs are also available in the man pages qi3pc(3): man qi3pc.
For developers and users of the staging branch, staging docs are available here.
If you use qi3pc in a project, reach out to me to have it listed here as an example.
qi3pc is currently used in my (unreleased) bar, buffalo. The current implementation of buffalo covers what was necessary to replace my previous polybar setup that I ditched for instability. So it's quite barebones. But the i3 module provides the best existing usage examples.
For a quick preview of buffalo's capabilities, check out this message sent to the i3wm mailing list a little while back.