Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Переход на новый индекс после удаления


Автор: Brodyaga 30.5.2011, 14:09
Всем привет!
У меня имеется модель вложенная в прокси модель для сортировки. Прокси модель назначена представлению (QTreeView)
К примеру в одном из узлов дерева есть 10 элементов. Стою на 5 элементе, удаляю его, а выделение перемещается на 9, хотя по уму должно перемещаться на следующую элемент за удаляемым (на 6). Правда, если бы не было прокси модели, оно и перемещалось бы на следующий, но для прокси модели (после сортировки) это не следующий индекс, а 9 .

Вопрос: как используя прокси модель после удаления правильно перейти на следующий элемент?

Автор: Brodyaga 30.5.2011, 16:21
Вроде разобрался, что нужно перед удаление запоминать следующий индекс за удаляемым и затем после удаления перемещатьсяна него:
Код


QModelIndex currentIndex=ui.treeView->currentIndex();
nextIndex = myProxyModel->index(currentIndex.row()+1,0,currentIndex.parent());

QPersistentModelIndex persistentModelIndex(nextIndex);

//Здесь производим удаление

nextIndex=persistentModelIndex.operator const QModelIndex &();
itemSelectionModel->setCurrentIndex(nextIndex,QItemSelectionModel::ClearAndSelect);


Теперь проблема встала в следующем: после извлечения из persistentModelIndex'а, обычного индекса, он не всегда ссылается на тот объект, на который ссылался, до добавления в persistentModelIndex.

Посмотрите пожалуйста кто знает, что я делаю не правильно?

Автор: Greeneyed 9.6.2011, 21:25
А почему бы не сделать так?

Код

    int curRow = ui.treeView->currentIndex().row();
    int curColumn = ui.treeView->currentIndex().column();

    // удаление

   int restoreRow;

    if(ui.treeView->model()->rowCount() > curRow)
            restoreRow = curRow;
        else
            restoreRow = ui.treeView->model()->rowCount() - 1;
    

    ui.treeView->setCurrentIndex(ui.treeView->model()->index(restoreRow, curColumn));


С QTableView и QListView это работало.

Автор: Brodyaga 10.6.2011, 14:13
Цитата

А почему бы не сделать так?

С QTableView и QListView это работало.

У меня QTreeView, а там нужно ещё родителя знать.
В итоге я сделал примерно также, только QPersistentModelIndex'ом всеровно воспользовался для записи туда этого самого родительского индекса, а не следующего индекса за удаляемым.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)