Just thoguh I'd drop a "temporary" solution I'm testing now. I ended up extending qtreeView, and capturing expand/collapse signals. Then I generate a QSet with these ids that later I can store/restore via model()->match(id) idea. Not sure how well it will work in very large data sets, say 100k items and 10k expanded state items, But well see.