First of all, this is a great prototype! A prototype like this is the essential first step if the qt code is to be changed.
In general, the code looks super elegant. Sometimes it's so elegant that it's a bit hard to know what is going on.
The QtPosition class looks like the heart of the code. It mirrors the corresponding position/vnode methods. I attempted something like this long ago, but I never got this far. I do remember that untangling the relationships between tree items and vnodes is much trickier than one might naively expect.
I just pushed code that increases the size of text. I hope you don't mind. It's much easier on my eyes. The new code also contracts all nodes initially.
Cloning appears to work, but not at the top level. At the top level the selected node changes after a clone, but nothing else happens, apparently. Sometimes the code crashes. The clone problems remains even if all nodes are expanded at first.
Cloning clearly is the heart of the matter. Somehow the qt items must remain in sync with vnodes. I suspect the top-level problems are nits.
The acid test would be clones of clones of clones...Presumably this would exponentially increase the number of qt tree items. Let me know if something more clever is going on.
That's all for now. This is a great start.
Edward