"Qt is Java for C++", one of my colleagues used to say, and I saw what he meant once I started working with it. We used to develop with Qt4 a lot and I rarely ran into any issues at all, getting started was really straight forward and the documentation and examples are (were?) pretty comprehensive.
I do still cite Qt's API documentation as the best I've ever used.
I've only done Qt toy apps on the Pi with C++, which was a pretty good experience, could imagine a large Qt codebase in C++ could be stressful.
For Python I like Qt quite a bit because the loose signal/slot approach meshes nicely with a dynamic language.
I work on a sizeable desktop application written in PyQt. While I agree that Qt has a very nineties feel about it, you don't have to buy into that. Specifically, you don't have to use class hierarchies to model your domain. It actually helps to have a language boundary -- we can let Qt be its object-oriented self, but on the Python side it's different. We do a limited amount of subclassing, which lets us hook into user interaction events, but other than that we use whatever works best in Python. As time passes, this seems to involve more and more straight-forward procedural code, less and less object-oriented modeling.
My experience as well - a lot of my nuts and bolts OO work in static languages was making things conform to interfaces and existing class hierarchies. In dynamic languages there's less need for that and hierarchies are shallower and less entangled. None of that is surprising, of course.
Heavily object-oriented code and custom scripting languages that are really hard to understand and use, and when there were problems (memory leaks, reference counting) I was stuck 15 (Qt) calls deep somewhere in the huge codebase.
Thanks, but I'm now doing it myself and learning the right abstractions (and sane software architecture in general), instead of spending my time learning the incantations to make this elephant move the way I need him to.