Проблема с QSqlTableModel - нет автоматических обновлений
после настройки модели таблицы в Qt 4.4, как это:
QSqlTableModel *sqlmodel = new QSqlTableModel();
sqlmodel->setTable("Names");
sqlmodel->setEditStrategy(QSqlTableModel::OnFieldChange);
sqlmodel->select();
sqlmodel->removeColumn(0);
tableView->setModel(sqlmodel);
tableView->show();
содержимое отображается правильно, но редактирование невозможно, ошибка:
QSqlQuery::value: not positioned on a valid record
3 ответов
Я могу подтвердить, что ошибка существует именно так, как вы ее сообщаете, в Qt 4.5.1, и что документация, например здесь, все еще дает неправильный пример (т. е. один, включая removeColumn звонок).
в качестве обходного пути я попытался написать слот, подключенный к beforeUpdate сигнал, с идеей проверки того, что не так с QSqlRecord, который будет обновлен в БД и, возможно, исправит его, но я не могу заставить это работать-любые вызовы методов этого параметра записи разбивают мою игрушку-приложение с BusError.
поэтому я отказался от этой идеи и переключился на то, что, без сомнения, правильный способ сделать это (видимость должна определяться видом, а не моделью, верно?- ): потерять removeColumn и вместо этого звоните . Таким образом, идентификаторы скрыты, и все работает.
поэтому я думаю, что мы можем подтвердить, что есть ошибка документации и открыть проблему об этом в Qt tracker, поэтому ее можно исправить в следующем раунде документов, правильно?
Кажется, что причина этого была в строке
sqlmodel->removeColumn(0);
после комментирования все работает отлично. Таким образом, мне придется найти другой способ не показывать ID в таблице ;-)
редактировать Я сказал "кажется", потому что в примере из" основ развития Qt " Йохан Телин также удалил первый столбец. Поэтому было бы неплохо, если бы кто-то еще попробовал это и сообщил результаты.
Я использую Qt 4.6.1 в PyQt, и проблема все еще здесь. Удаление " removeColumn (0)" решает проблему.