From e5c8927fe87d0b0d91ac905ec2e57a4ea6f278ec Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Thu, 7 Jul 2011 12:42:07 +0200 Subject: QSqlTableModel::setData(): comment historical idiosyncracies Change-Id: I5c4782e18dc7a471dc294a4146db04f1efd3ed2e Reviewed-by: Yunqiao Yin --- src/sql/models/qsqltablemodel.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/sql') diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index 298cd03e20..3e5beb33b7 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -494,11 +494,25 @@ bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, in bool isOk = true; if (d->strategy == OnFieldChange && row.op != QSqlTableModelPrivate::Insert) { + // historical bug: bad style to call updateRowInTable. + // Should call submit(), but maybe the author wanted to avoid + // clearing the cache on failure. isOk = updateRowInTable(index.row(), row.rec); if (isOk) select(); } + // historical bug: dataChanged() is suppressed for OnFieldChange and OnRowChange + // when operating on an "insert" record. This is to accomodate + // applications that call setData() while handling primeInsert(). + // Otherwise dataChanged() would be emitted between beginInsert() + // and endInsert(). + // The price of this workaround is that, although the view making + // the change will already display the new value, other views connected + // to the model probably will not. + // It's not clear why OnManualSubmit is excluded from this workaround. + // Calling setData() while handling primeInsert() is arguably very wrong anyway. + // primeInsert() provides a ref to the record for settings values. if (d->strategy == OnManualSubmit || row.op != QSqlTableModelPrivate::Insert) emit dataChanged(index, index); -- cgit v1.2.3