Обновление QListView не работает

Нужна помощь, чтобы выяснить, почему мой QListView не обновится.

я использую QListView с QSqlTableModel, Я реализую модель в следующей функции. Я вызываю эту функцию из конструктора класса.

void myclass::refresh()
{
model_path = new QSqlTableModel(this);
model_path->setTable("mytable");
model_path->setEditStrategy(QSqlTableModel::OnManualSubmit);
model_path->select();
ui->listView_path->setModel(model_path);
ui->listView_path->setModelColumn(1);
}

Следующая функция добавит строку и qlistView обновляет без каких-либо проблем.

 void myclass::on_pushButton_add_clicked()
{
QSqlRecord rec (model_path->record());
rec.setValue(1,ui->lineEdit->text());
rec.setValue(2,2);

model_path->insertRecord(-1, rec);
emit model_path->layoutChanged();
}

Следующая функция удалит строку в зависимости от того, какая строка выделена в QListView, Удаление работает, как строка удаляется из базы данных, как только .submitAll готово. Тем не менее QListView не обновляется последовательно.

 void myclass::on_pushButton_remove_clicked()
{
model_path->removeRow(ui->listView_path->currentIndex().row());
emit model_path->dataChanged(ui->listView_path->currentIndex(),ui->listView_path->currentIndex());
emit model_path->layoutChanged();
}

Если я удалю строку, список не обновится. Если я добавлю одну или несколько новых строк, а затем удалю одну или все из них, они будут обновлены. Как видите, я использую оба dataChanged а также layoutChanged но они, кажется, не делают здесь много.

Я не понимаю, почему обновление не соответствует. Кто-нибудь может помочь?

0

Решение

Вам не нужно звонить обоим layoutChanged или же dataChanged когда вы добавляете или удаляете несколько строк. Они не предназначены для такого рода обновлений. Проверьте документация

Возможно, ваша проблема в понимании стратегии редактирования QSqlTableModel::OnManualSubmit, Попробуйте изменить это на QSqlTableModel::OnFieldChange

0

Другие решения


По вопросам рекламы [email protected]