Вот с такой проблемой я столкнулся (Qt 4.6.2, база - SQLite): есть две таблицы:
stations:
id_sub - primary key |
name - TEXT |
lines:
id - primary key |
id_sub1 - INTEGER |
id_sub2 - INTEGER |
data - TEXT |
Для первой таблицы создаю модель от QSqlTableModel и в качестве view использую QComboBox (m_station):
m_pStationModel = new QSqlTableModel(this, m_db);
m_station.setModel(m_pStationModel);
m_station.setModelColumn(1);
Для второй таблицы создаю модель от QSqlRelationalTableModel и в качестве view строю таблицу m_pTable... В конструкторе модели строю связку:
QLinesSqlModel::QLinesSqlModel(int id, QObject *parent, QSqlDatabase db) : QSqlRelationalTableModel(parent, db)
{
setTable("lines");
setRelation(1, QSqlRelation("stations", "id", "name"));
setRelation(2, QSqlRelation("stations", "id", "name"));
setFilter(QString("lines.id_sub1 = %1").arg(id));
select();
ну и собственно часть кода, где эта модель используется:
m_pLinesModel = new QLinesSqlModel(m_station_id, this, m_db);
m_pLinesModel->setEditStrategy(QSqlTableModel::OnRowChange);
m_pTable->setModel(m_pLinesModel);
m_pTable->setItemDelegate(new QSqlRelationalDelegate(this));
Все работает замечательно, во второй и третьей колонках view при редактировании виден комбо-бокс, там список имен из первой таблицы, строки вставляются... все ок.
Но вот теперь в первую таблицу вставляю новую строку. Чтобы апдейтить view для второй таблицы естественно использую
relationModel(1)->select();
relationModel(2)->select();
Ага, в соответствующих колонках при редактировании это новое имя в комбо-боксе появляется,.. но при попытки выбрать его в качестве нового значения ничего не происходит - при смене фокуса там восстанавливается предыдущее значение... После перезагрузки программы все ок - новое имя можно выбрать. Подскажите плиз кто-нито, в чем тут проблема... reset я пробовал, другой режим редактирования - пробовал, пробовал даже базу переоткрывать - ничего не помогает.