In meiner QT 6.8.2 -Desktop -Anwendung muss ich die Onrowchange Strategie für einen QSQLRelationalTablemodel verwenden, da es sich um eine Entwurfsbeschränkung für die UX handelt. Um die Benutzeroberfläche konsistent und mit allen Tabellen zu synchronisieren, ist es obligatorisch zu wissen, wann eine Zeile in der Datenbank tatsächlich aktualisiert wird. Hier meine eigene Unterklasse des QSQLRelationalTablemodel :
Code: Select all
#include
class TableModel : public QSqlRelationalTableModel
{
Q_OBJECT
public:
explicit TableModel(QObject *parent = nullptr, const QSqlDatabase &db = QSqlDatabase()) : QSqlRelationalTableModel(parent, db)
{
}
public slots:
bool submit() override
{
bool ret = QSqlRelationalTableModel::submit();
if (ret) emit rowSubmitted();
return ret;
}
signals:
void rowSubmitted();
};
Dieser Code löste das Problem, das ich in der verknüpften Frage hatte, aber die Entwicklung habe die Funktion von Subschritt () als an jedem Zeit bezeichnet, an dem der Benutzer eine Zeile ändert, egal ob er im Modell tatsächlich etwas im Modell geändert hat! Also habe ich versucht, diese Zeile in: < /p>
zu ändern
Code: Select all
if (ret && isDirty()) emit rowSubmitted();
Aber in diesem Fall ist das Signal niemals emittiert, auch kurz nach der Bearbeitung einer Zeile. Ich denke, weil das Modell zu diesem Zeitpunkt bereits aktualisiert wurde. rowsUbmuped () Signal
Nur Wenn eine Zeile wirklich in die Datenbank übermittelt wird?