Нужна помощь, чтобы выяснить, почему мой 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
но они, кажется, не делают здесь много.
Я не понимаю, почему обновление не соответствует. Кто-нибудь может помочь?
Вам не нужно звонить обоим layoutChanged
или же dataChanged
когда вы добавляете или удаляете несколько строк. Они не предназначены для такого рода обновлений. Проверьте документация
Возможно, ваша проблема в понимании стратегии редактирования QSqlTableModel::OnManualSubmit
, Попробуйте изменить это на QSqlTableModel::OnFieldChange