As mentioned in the first part of this article, the workaround with focus unfortunately didn’t work. In some cases application is still crashing. So after next hours of debugging and unsuccessful consulting the problem on stack overflow I probably found a the core reason of this bug and the solution too.
The core of this problem doesn’t lie in the QTreeModel, but in Qt implementation of Cocoa Accessible. The problem is that although the PropertyTree is correctly cleared, there is object QAccessibleTableCell which isn’t correctly updated after
clear()
.
This means that although the PropertyTree and TreeWidget is empty, the QAccessibleTableCell object still holds m_index variable to invalid element. And when
NSAcessibleEntryPointrAttributeNames
is executed, m_index is translated to QTreeWidget element pointer and accessed. And this means that application completely crashes.
The solution is pretty simple. Together with property editor clear set also current index and selected index to NULL.
propertyBrowser->clear(); propertyManagers->clear(); propertyManagers->treeWidget()->setCurrentItem(NULL); propertyManagers->treeWidget()->setItemSelected(NULL, false);
And that is it. Thanks for this your application will not crash any more (on this bug 😉 ).