LINUX.ORG.RU

[Qt] QSortFilterProxyModel и автосортировка

 


0

1

Использую QTreeView в качестве представления и классы, унаследованные от QSortFilterProxyModel и QFileSystemModel в качестве прокси-модели и модели соответственно. Через QTreeView пользователь может редактировать элементы (переименовывать соответствующие файлы).

Проблема в том, что после переименования файл остаётся на том же месте в дереве, т.е. сортировка нарушается. Хочу сделать так, чтобы элемент после переименования сам перемещался в нужное место, а сортировка не нарушалась.

На QSortFilterProxyModel стоит свойство dynamicSortFilter в true. Попытки запилить костыль, вручную вызывающий sort() у прокси-модели при срабатывании QFileSystemModel::setData(), не привели к желаемому результату.

Как можно сделать то, что я хочу?

В общем, запилил костыль, вроде, работает

// Это в конструкторе
        connect(treeView->itemDelegate(), SIGNAL(closeEditor(QWidget *, QAbstractItemDelegate::EndEditHint)), this, SLOT(updateSorting()));
// Это слот
void MainWindow::updateSorting()
{
        int column = treeView->header()->sortIndicatorSection();
        Qt::SortOrder order = treeView->header()->sortIndicatorOrder();
        treeView->sortByColumn(-1, order);
        treeView->sortByColumn(column, order);
}

Суть в том, чтобы при закрытии делегата, через который производилось редактирование, вручную дёрнуть сортировку. Странно, что QSortFilterProxyModel само так не делает.

gentoo_root ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.