Russian Qt Forum
Ноябрь 05, 2024, 22:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: При удалении строк модели, QListView переходит в начало списка  (Прочитано 3618 раз)
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) не помогает. Элемент выделяется, но вью по прежнему переходит в начало списка.
Записан
cyrus
Гость
« Ответ #1 : Май 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;
}
Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #2 : Июнь 01, 2011, 11:58 »

Подскажите а как в Qt3 удалить строку из QListView?
Записан

Qt 5.11.0, Win, MinGW
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 23.