- 
    Bug 
- 
    Resolution: Done
- 
    P1: Critical 
- 
    6.1.3
- 
    Windows 10
 MSVC2019 64-bit
- 
        
- 
        cb10cf1e43
We have an application that contains a QTreeView where checking a box in one of the cells ends up resetting the model. The view's model is a QSortFilterProxyModel with an underlying QAbstractItemModel implementation based on the Simple Tree Model Example. This seemed to work OK on Qt 5.12.11 and earlier, but now that we have migrated to 6.1.3 it causes a crash. In Debug mode, it triggers the following ASSERT:
ASSERT: "it != source_index_mapping.constEnd()" in file \Users\qt\work\qt\qtbase\src\corelib\itemmodels\qsortfilterproxymodel.cpp, line 218  
I've attached a small example project based on the Simple Tree Model example that reproduces the issue. To reproduce the issue most reliably, click on a checkbox for one of the child nodes (i.e. expand the "Form Editing Mode" node, and click the checkbox next to "Loading and saving forms"). The following stack trace is produced:
                                                                                                         
                                                                                                         
1   qt_message_fatal                                       qlogging.cpp              1863 0x7ff95ecb7532 
2   QMessageLogger::fatal                                  qlogging.cpp              891  0x7ff95ecb5926 
3   qt_assert                                              qglobal.cpp               3123 0x7ff95eca1abd 
4   QSortFilterProxyModelPrivate::index_to_iterator        qsortfilterproxymodel.cpp 219  0x7ff95f43be46 
5   QSortFilterProxyModelPrivate::proxy_to_source          qsortfilterproxymodel.cpp 494  0x7ff95f40de80 
6   QSortFilterProxyModel::mapToSource                     qsortfilterproxymodel.cpp 3111 0x7ff95f4091eb 
7   QSortFilterProxyModel::buddy                           qsortfilterproxymodel.cpp 2471 0x7ff95f40cc6a 
8   QAbstractItemView::edit                                qabstractitemview.cpp     2700 0x7ff95e37bac9 
9   QAbstractItemView::mouseReleaseEvent                   qabstractitemview.cpp     1938 0x7ff95e37ebde 
10  QTreeView::mouseReleaseEvent                           qtreeview.cpp             1952 0x7ff95e4c1839 
11  QWidget::event                                         qwidget.cpp               8659 0x7ff95dd96f70 
12  QFrame::event                                          qframe.cpp                550  0x7ff95df326a4 
13  QAbstractScrollArea::viewportEvent                     qabstractscrollarea.cpp   1095 0x7ff95df27ec1 
14  QAbstractItemView::viewportEvent                       qabstractitemview.cpp     1766 0x7ff95e37d716 
15  QTreeView::viewportEvent                               qtreeview.cpp             1332 0x7ff95e4c241b 
16  QAbstractScrollAreaPrivate::viewportEvent              qabstractscrollarea_p.h   110  0x7ff95df2fcb4 
17  QAbstractScrollAreaFilter::eventFilter                 qabstractscrollarea_p.h   121  0x7ff95df2f26c 
18  QCoreApplicationPrivate::sendThroughObjectEventFilters qcoreapplication.cpp      1174 0x7ff95ee2c764 
19  QApplicationPrivate::notify_helper                     qapplication.cpp          3404 0x7ff95dcb505d 
20  QApplication::notify                                   qapplication.cpp          2868 0x7ff95dcafca4 
... <More>                                                                                               
                                   
If I compile and run the program with 5.12.11 (MSVC2017 64-bit) you do not get a crash (it prints "It didn't crash"). If I run the program with 6.1.3 (MSVC2019 64-bit, also macOS), I get a crash almost every time (occasionally it doesn't crash on the first click). I'm not sure if this is exposing a problem with how we coded reset functionality or due to some other change since 5.12.
Final note: if I change the connection type to QueuedConnection the problem goes away, but I'm not sure if that's a valid solution or a workaround.
