Название: Неверное значение rowCount() в QSortFilterProxyModel Отправлено: AlekseyK от Октябрь 05, 2010, 17:24 Почему-то rowCount() выдаёт меньшее количество строк, чем есть в sourceModel()->rowCount(). Фильтрации нет, только сортировка. sourceModel - это QAbstractTableModel. Проблема в следующем:
Загружаю данные в sourceModel получаю, например, 34 строки. Затем полностью меняю данные в sourceModel: Код sourceModel()->rowCount() выдаёт 307, а QSortFilterProxyModel::rowCount() по прежнему 34. В чём проблема? Как сказать QSortFilterProxyModel - обновить данные? invalidate() не помогает. Название: Re: Неверное значение rowCount() в QSortFilterProxyModel Отправлено: AlekseyK от Октябрь 05, 2010, 17:36 И наоборот, если перехожу от большего количества строк к меньшему - QSortFilterProxyModel также показывает старое значение и в QTreeView вижу, например, 307 строк, а не 34, а заполнены только 34 естественно.
Название: Re: Неверное значение rowCount() в QSortFilterProxyModel Отправлено: AlekseyK от Октябрь 05, 2010, 18:36 Интересно, что если сразу после сигнала sourceModel()->modelReset() вызвать proxyModel->invalidate() или даже привязать (connect) этот сигнал к данному слоту вываливается ошибка (segmentation fault) на следующем месте в qabstractitemmodel.cpp:
Цитировать Q_GLOBAL_STATIC(QEmptyItemModel, qEmptyModel) т.е. QSortFilterProxyModel модель ещё пуста здесь. Как это лечить?!Название: Re: Неверное значение rowCount() в QSortFilterProxyModel Отправлено: AlekseyK от Октябрь 06, 2010, 01:24 если сделать:
Код: emit layoutAboutToBeChanged(); Название: Re: Неверное значение rowCount() в QSortFilterProxyModel Отправлено: voronElf от Октябрь 06, 2010, 07:07 ну из того кода, что показал, подход вроде верный. У меня работает такое. Давайте остальной код. Можт в обработке данных валится чтото ?
попробуй для прокси-модели выставить setDynamicSortFilter(true); Название: Re: Неверное значение rowCount() в QSortFilterProxyModel Отправлено: AlekseyK от Октябрь 06, 2010, 11:49 Выставил первым делом - не работает. Код даю, не жалко - LGPL ;) Модели находятся в cfilebrowsermodel.cpp и cfilebrowsermodel.h. Данные в модели QAbstractTableModel меняются в методах populateFilesAndDirectories() и populateDrives(). Потом пытаюсь сказать QSortFilterProxyModel, что данные изменились. Но reset() не работает, а на остальном оно всё время падает: будь то invalidate(), emit layoutChanged() или ещё что-нибудь. В методе void CFileBrowserSortModel::reset() просто дебуггером смотрю, что данные (rowCount) в QSortFilterProxyModel не меняются. В результате получается кошмар: можно запустить и посмотреть какой ужас выдаёт QTreeView при смене директории.
Название: Re: Неверное значение rowCount() в QSortFilterProxyModel Отправлено: AlekseyK от Октябрь 06, 2010, 17:24 Поставил setDynamicSortFilter(false), стало немного получше, но rowCount в QSortFilterProxyModel всё равно неправильный и TreeView выводит кучу пустых строк.
Аналогичные проблемы у людей: http://www.prog.org.ru/topic_12450_0.html http://www.prog.org.ru/topic_13265_0.html http://www.prog.org.ru/topic_11715_0.html http://www.prog.org.ru/topic_9392_0.html http://www.prog.org.ru/topic_6653_0.html http://www.prog.org.ru/topic_10178_0.html Похоже, что тролли никак не допилят QSortFilterProxyModel: может поломали layoutAboutToBeChanged/layoutChanged/invalidate. Видимо нужно будет при случае отчёт об ошибке отправить в Qt. Наверное реализую сортировку в самой исходной модели переопределив sort, да и быстрее будет. P.S. И похоже, что у них с этим QSortFilterProxyModel таки серьёзные проблемы (http://bugreports.qt.nokia.com/secure/IssueNavigator.jspa?reset=true&&query=QSortFilterProxyModel&summary=true&description=true&type=1&pid=10510&component=19135) Название: Re: Неверное значение rowCount() в QSortFilterProxyModel Отправлено: AlekseyK от Октябрь 08, 2010, 01:37 Отправил ребятам отчёт об ошибках: http://bugreports.qt.nokia.com/browse/QTBUG-14336
Надеюсь исправят. Название: Re: Неверное значение rowCount() в QSortFilterProxyModel Отправлено: AlekseyK от Октябрь 15, 2010, 18:23 Блин, таки мой бок: http://bugreports.qt.nokia.com/browse/QTBUG-14336?focusedCommentId=129703&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_129703
Код
|