It's definitely a mixed bag and the ergonomics are rather shit due to the use of Pin<&mut T> everywhere, which requires as_mut() to reacquire mutable references for every (mutable self) method call - it's madness. There is also a lot of boilerplate in C++ and Rust to bind everything, especially since Cxx-qt bindings are very minimal. It didn't take long to figure out how to write my own and eventually generate them with Claude using Qt documentation but some core features like Rust getters aren't implemented yet in the core library so there's some stuff missing when writing custom QObjects.
Writing models has been surprisingly easy but there are still lots of annoyances like having to use QVariant to store everything because properties that refer to other QObjects must be raw *mut pointers. It's only taken a few hours each to write my models including a filesystem tree model. At this point I've got several examples of Rust models and C++->Rust conversions that I feed to Claude and it can easily write models from scratch or convert C++ models in the wild to custom Rust ones.
Sadly I haven't taken notes (I should) on my experience so far so my thoughts are rather disorganized. All that said, I've got instant hot reload of all the QML bits and I don't have to write C++ code with complex lifetimes so overall it's been a win.