Russian Qt Forum

Qt => Model-View (MV) => Тема начата: cyrus от Май 08, 2011, 20:58



Название: При удалении строк модели, 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?