Можно ли обратиться к элементу ListView? Qt

Доброго времени суток.

На прошлый вопрос мне так и не ответили, придется уточнить в новом. Есть база данных клиентов, там хранится множество полей. И есть такой код:

//Синхронизация ListWidget с базой данных
void MainWindow::listWidgetUpdate()
{   
    ui->listWidget->clear();
    QSqlQuery query_update("SELECT * FROM clients");
    QSqlRecord rec = query_update.record();
    while(query_update.next()){
        companyName = query_update.value(rec.indexOf("companyName")).toString();
        ui->listWidget->addItem(companyName);
        QVariant id = query_update.value(rec.indexOf("id")).toString();
        ui->listWidget->item(ui->listWidget->count()-1)->setData(Qt::UserRole, id);
    }
}

Из базы данных я забираю названия и вставляю в ListWidget, каждому элементу присваивая так же взятый из БД id. (->setData). Суть в том, что при нажатии на элемент ListWidget, выводятся все поля этой компании, обращаясь к БД по айди, хранящемуся в Data.

Проблема в том, что это очень медленно. При тестировании на 5000+ компаний, всё подвисает, причем очень недурно. А ведь необходимо, чтобы данные еще и обновлялись что называется "в лайве" и у пользователей всегда была актуальная информация. То есть таймеры и т.д. тут не прокатят. Подскажите, можно ли получить аналогичную функциональность, пользуясь QSqlQueryModel и, допустим, ListView? Ибо я не нашел, как можно к элементам ListView обращаться и тем более запихивать в них дополнительные данные. Если же нет, то какие еще варианты более быстрого решения Вы можете предложить?


Ответы (1 шт):

Автор решения: Pavel Gridin

QListView обменивается данными с моделью с помощью функций data и setData.

Вариант для вас: вывести свой класс из QAbstractItemModel, реализовать в нём data() и setData(). Затем создать экземпляр этого класса и установить функцией QListView::setModel();

И обратите внимание на функции beginResetModel(), endResetModel() (и им подобные) менять данные в модели можно только между ними, это фактически сигнал о том, что модель изменилась

→ Ссылка