Дополнительная пустая строка в QSqlTableModel - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь добавить всегда пустую последнюю строку.Теперь у меня есть модель прокси, по которой я вызываю insertRow () - строка вставлена.Но мне нужно добавить еще одну строку, когда последняя строка обновляется (данные вставляются).К какому сигналу я должен подключиться?

Иногда возникает странная ошибка - при нажатии на существующую строку данные копируются в последнюю строку.У вас есть идея, что может быть не так?

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Возможно, вы захотите подключить слот к сигналу QSqlTableModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ).

0 голосов
/ 11 декабря 2012

Я пробовал это.

Есть пара проблем, которые заставили меня переосмыслить, как это реализовать:

  1. Как QSqlTableModel внутренне обрабатывает буфер (указатель d вы не можете доступ даже при создании подклассов) является причиной, по которой вы видите странные вещи которые копируют данные в последнюю строку.

  2. Невозможно различить количество строк в таблице и количество строк в базовой модели. Они всегда одинаковы, вам придется использовать некоторые флаги, чтобы знать, когда у вас уже есть новая строка и вы не хотите добавлять другую (dataChanged выдается при изменении любой строки)). Есть, по крайней мере, 4 сигнала, которые вы должны были бы подключить для обновления этих флагов:

     void   beforeDelete ( int row )
     void   beforeInsert ( QSqlRecord & record )
     void   beforeUpdate ( int row, QSqlRecord & record )
     void   primeInsert ( int row, QSqlRecord & record )
    
  3. Если у вас более одного столбца. Какой метод отправки вы выбрали? (вручную, onrowchange ... и т. д.) В зависимости от этого вам придется решить, добавляя новую пустую строку. (есть какие-либо ошибки в последних изменениях?)

Не невозможно, но безобразно.

Модель и стол слишком связаны, чтобы найти простое решение для этого. Я добавил форму под таблицей для добавления новых данных.

Я бы лучше переопределить вашу собственную модель и / или таблицу, чем использовать для этого те, которые предоставляет Qt.

...