Всем привет!
Есть моя модель(на основе QAbstractItemModel) и стандартная QSortFilterProxyModel на которую настроено дерево. Сортировка осуществляется по столбцу sortOrder из модели.
myModel = new MyModel(this);
proxyModel = new QSortFilterProxyModel;
proxyModel->setDynamicSortFilter(true);
proxyModel->setSourceModel(myModel);
ui.treeView->setModel(proxyModel);
ui.treeView->sortByColumn(2,Qt::AscendingOrder);
Нужно поднять одну строку в дереве выше (поменять sortOrder местами у двух строк).
void Widget::on_btnUp_clicked()
{
myModel->moveUp(proxyModel->mapToSource(ui.treeView->currentIndex()));
}
После этого куда-то пропадает выделение в дереве, как его вернуть?
Код в модели метода подъёма:
bool MyModel::moveUp( const QModelIndex& index )
{
Item* item = itemFromIndex(index);
Item* parentItem = item->parentItem();
Item* prevItem = parentItem->itemBySortOrder(item->sortOrder()-1);
Q_ASSERT(prevItem);
emit layoutAboutToBeChanged();
// меняем местами
parentItem ->swapItems(prevItem, item);
emit layoutChanged();
return true;
}
Прикрепил к посту всё тестовое приложение.
Для того, чтобы понять мою проблему, нужно встать на любой item без child'ов в середине списка и нажать up - item'ы поменяются местами, но выделение пропадёт. Причём если item имеет child'ов, то всё работает!