Я пробовал это.
Есть пара проблем, которые заставили меня переосмыслить, как это реализовать:
Как QSqlTableModel внутренне обрабатывает буфер (указатель d вы не можете
доступ даже при создании подклассов) является причиной, по которой вы видите странные вещи
которые копируют данные в последнюю строку.
Невозможно различить количество строк в таблице и количество строк в базовой модели. Они всегда одинаковы, вам придется использовать некоторые флаги, чтобы знать, когда у вас уже есть новая строка и вы не хотите добавлять другую (dataChanged выдается при изменении любой строки)). Есть, по крайней мере, 4 сигнала, которые вы должны были бы подключить для обновления этих флагов:
void beforeDelete ( int row )
void beforeInsert ( QSqlRecord & record )
void beforeUpdate ( int row, QSqlRecord & record )
void primeInsert ( int row, QSqlRecord & record )
Если у вас более одного столбца. Какой метод отправки вы выбрали? (вручную, onrowchange ... и т. д.) В зависимости от этого вам придется решить, добавляя новую пустую строку. (есть какие-либо ошибки в последних изменениях?)
Не невозможно, но безобразно.
Модель и стол слишком связаны, чтобы найти простое решение для этого.
Я добавил форму под таблицей для добавления новых данных.
Я бы лучше переопределить вашу собственную модель и / или таблицу, чем использовать для этого те, которые предоставляет Qt.