Проблема с 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)" решает проблему.