Как "выбрать" последний элемент QListView?
Существует программа учета клиентов. Из базы данных в модель QSqlQueryModel закидываю имя и id клиента, вывожу имена в ListView. При нажатии на отдельный элемент открывается форма полной информации о выбранном клиенте, полученная путем обращения к базе данных по id.
Суть в следующем, раньше этот функционал выполнял QListWidget, но от него я отказался из-за скорости с большим кол-вом данных. Весь функционал восстановил, кроме одного. Допустим, добавляю я в бд нового клиента, после чего обновляю модель:
void MainWindow::UpdateClients()
{
searchModel->setQuery("SELECT id, companyName FROM clients");
while (searchModel->canFetchMore()){
searchModel->fetchMore();
}
}
ListView обновляется, а новый пользователь добавился в конец. Как его сразу "активировать" - то есть произвести нажатие + скроллбар отмотать до самого конца? Есть сигнал
void MainWindow::on_listView_clicked(const QModelIndex &index)
С помощью него вывожу инфу о выбранном клиенте, но для сего действия нужно знать индекс последнего элемента. Как быть?
Ответы (1 шт):
В первом приближении, как-то так:
int rowCount = listView->model()->rowCount();
QModelIndex lastIndex = listView->model()->index(rowCount-1, 0);
listView->setCurrent(lastIndex);
Но см. описание QSqlQueryModel::rowCount() — для некоторых драйверов баз данных, вероятно, придётся сначала предварительно вручную закешировать все данные из базы.
Также, строго говоря, это будет просто последний элемент в таблице, который может и не быть только что вставленным.