Название: При удалении строк модели, QListView переходит в начало списка
Отправлено: cyrus от Май 08, 2011, 20:58
Заметил, что в режиме множественного выделения (selectionMode != SingleSelection) при удалении строк из модели, вью переходит в начало списка. Что это, и как с этим бороться? Версия Qt: 4.7 // Удаление выделенных элементов bool MainWindow::removeWordFromList() { QItemSelection sel = ui->wordList->selectionModel()->selection();
if(!sel.isEmpty()) { for(int i = 0; i < sel.length(); ++i) { wordList.removeRows(sel[i].top(), sel[i].height(), QModelIndex()); }
return true; }
return false; }
// метод removeRows в модели bool StringListModel::removeRows(int row, int count, const QModelIndex &parent) { if(!parent.isValid() && count > 0) { if(row >= 0 && row < items.length()) { beginRemoveRows(parent, row, row + count - 1); items.erase(items.begin() + row, items.begin() + row + count); endRemoveRows(); return true; } }
return false; }
UPD: Принудительная установка текущего элемента (QListView::setCurrentIndex) не помогает. Элемент выделяется, но вью по прежнему переходит в начало списка.
Название: Re: При удалении строк модели, QListView переходит в начало списка
Отправлено: cyrus от Май 08, 2011, 23:54
В общем нашел вот такой костыль. bool MainWindow::removeWordFromList() { QItemSelection sel = ui->wordList->selectionModel()->selection();
if(!sel.isEmpty()) { for(int i = 0; i < sel.length(); ++i) { wordList.removeRows(sel[i].top(), sel[i].height(), QModelIndex()); }
// Настильно скролимся к текущему элементу ui->wordList->scrollTo(ui->wordList->currentIndex(), QAbstractItemView::PositionAtCenter); // И выделяем его ui->wordList->selectionModel()->select(ui->wordList->currentIndex(), QItemSelectionModel::Select);
return true; }
return false; }
Название: Re: При удалении строк модели, QListView переходит в начало списка
Отправлено: kolob от Июнь 01, 2011, 11:58
Подскажите а как в Qt3 удалить строку из QListView?
|