$ show KDAB/GammaRay
GammaRay is a mature runtime introspection and manipulation tool for Qt applications, not a data or research project. In production it injects a probe into a target Qt process via a launcher that supports preload, GDB/LLDB, and Windows DLL injection, then connects a Qt Widgets client either in-process or over TCP. The probe tracks QObjects, exposes their properties, signals/slots, object trees, widget hierarchies, QML scene graphs, model/view contents, state machines, network activity, and even records and replays QPainter command streams. The core machinery uses a custom client-server protocol built around Endpoint, ObjectBroker, remote models, and network-synchronized selection models, with lazy-loading proxy models on the client side. The architecture is modular: a shared protocol layer in common/, a server-side core with property adaptors, tool managers, and remote model servers, a client UI layer, and dozens of plugin-based inspectors. Each plugin follows a consistent pattern - a server-side tool, a client-side widget, and interface classes registered through the ObjectBroker. The codebase shows strong engineering discipline: consistent abstractions, extensive Qt Test based tests, CI workflows for multiple Qt versions and sanitizers, and careful handling of cross-process model synchronization. The main technical risk is heavy use of Qt private APIs (e.g., QPaintBuffer, QQuickItemPrivate, QObjectPrivate) and vendored third-party code, which creates fragility across Qt releases and platform-specific maintenance overhead. Overall this is a well-crafted, complex desktop application. It is not a general-purpose library; most of its value for reuse lies in its plugin patterns and a few isolated Qt utility components. The generic, low-coupling pieces like PropertyBinder, SearchLineController, DeferredTreeView, and UIStateManager can be lifted into other Qt projects with minimal modification.
The LLM identified 5 files worth highlighting for reuse:
Two-way property synchronization between two QObjects. It is small, isolated, and depends only on Qt core, making it directly reusable in any Qt application that needs to bind e.g. a UI control property to a backend object property.
A reusable controller that connects a QLineEdit to a QSortFilterProxyModel, adding debounce, recursive tree expansion, and awareness of remote model loading states. It encapsulates a common Qt model/view search pattern with production-grade edge-case handling.
A QTreeView subclass that defers column resizing, visibility, and expansion decisions until the model has data, and persists header and state settings. This is a practical, self-contained widget for large or slowly-populated Qt models.
Generic save/restore of UI state such as splitter sizes, header widths, and window geometry. It is decoupled from GammaRay internals and can be dropped into any Qt Widgets application to provide persistent layout management.
A small templated shared object pool that reuses instances to reduce allocation churn. It has no dependency on GammaRay-specific types, so it can be extracted as a general-purpose C++ utility for high-frequency message or node allocation.