Проблема с QSqlTableModel - нет автоматических обновлений - PullRequest
8 голосов
/ 24 июня 2009

После настройки модели таблицы в 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 ]

12 голосов
/ 18 июля 2009

Я могу подтвердить, что ошибка существует именно так, как вы сообщаете об этом в Qt 4.5.1, И что документация, например, здесь , все еще дает неправильный пример (то есть один, включающий вызов removeColumn).

В качестве обходного пути я попытался написать слот, подключенный к сигналу beforeUpdate, с целью проверить, что не так с QSqlRecord, который должен быть обновлен в БД, и, возможно, исправить его, но я могу чтобы это сработало - любые вызовы методов этого параметра записи приводят к сбою моего игрушечного приложения с ошибкой BusError.

Итак, я отказался от этой идеи и переключился на то, что, без сомнения, является правильным способом сделать это (видимость должна определяться видом, а не моделью, верно? -): потерять removeColumn и в Вместо этого позвоните tableView->setColumnHidden(0, true) вместо этого. Таким образом, идентификаторы скрыты, и все работает.

Так что я думаю, что мы можем подтвердить, что есть ошибка документации и открыть проблему об этом в трекере Qt, так что это можно исправить в следующем раунде документов, верно?

0 голосов
/ 05 марта 2010

Я использую Qt 4.6.1 в PyQt, и проблема все еще здесь. Удаление «removeColumn (0)» решает проблему.

0 голосов
/ 26 июня 2009

Кажется, причина этого была в строке

sqlmodel->removeColumn(0);

После комментирования все работает отлично. Таким образом, мне придется найти другой способ не показывать идентификаторы в таблице; -)

EDIT Я сказал «кажется», потому что в примере из «Основ разработки Qt» Йохан Телин также удалил первый столбец. Так что было бы неплохо, если бы кто-то еще попробовал это и сообщил о результатах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...