Russian Qt Forum
Июнь 16, 2024, 01:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlTableModel - isDirty  (Прочитано 6699 раз)
aliks-os
Гость
« : Август 22, 2011, 11:04 »

isDirty, как можно сбросить данный признак
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Август 22, 2011, 11:56 »

Из асистента:
"Dirty values are values that were modified in the model but not yet written into the database."
Дальше сам осилишь?
Записан

Юра.
aliks-os
Гость
« Ответ #2 : Август 22, 2011, 13:42 »

я сам в курсе, эту фразу я знаю наизусть.

популярно объясняю
дело в том что я пишу данные в базу не при помощи submit, а использую
updateRowInTable
insertRowIntoTable
соответственно эти функции не сбрасывают признак dirty


вот такая бяка
« Последнее редактирование: Август 22, 2011, 13:46 от aliks-os » Записан
developer
Гость
« Ответ #3 : Август 22, 2011, 13:59 »

К чему такая сложность?
Записан
aliks-os
Гость
« Ответ #4 : Август 22, 2011, 14:07 »

вся эта сложность для того, чтобы при вызове submit не было вот этого

Submit()
On success the model will be repopulated. Any views presenting it will lose their selections.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Август 22, 2011, 21:06 »

>>эту фразу я знаю наизусть
в классе QSqlTableModel нет никакого признака, в методе isDirty() просто сравнивается информация в кеше с информацией в модели. Обновляй каждый индекс модели в ручную.
Записан

Юра.
aliks-os
Гость
« Ответ #6 : Август 23, 2011, 10:08 »

>>эту фразу я знаю наизусть
в классе QSqlTableModel нет никакого признака, в методе isDirty() просто сравнивается информация в кеше с информацией в модели. Обновляй каждый индекс модели в ручную.

Что значить обновить каждый индекс вручную???
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Август 23, 2011, 10:39 »

setData(QModelIndex)
Записан

Юра.
aliks-os
Гость
« Ответ #8 : Август 23, 2011, 10:59 »

это я и так делаю
Записан
aliks-os
Гость
« Ответ #9 : Август 23, 2011, 12:26 »

Вопрос решен через переопределение в модели headerData
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Август 23, 2011, 20:03 »

>>Вопрос решен через переопределение в модели headerData
хм, для меня не очевидно. А что ты там делаешь?
Записан

Юра.
aliks-os
Гость
« Ответ #11 : Август 25, 2011, 08:40 »

просто напросто редактор данных через грид, однако чтобы каждый раз при редактировании не вызывать submit (который перезагружает данные, а также теряется выделение текущей ячейки) я пошел на данные ухищрения
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #12 : Август 25, 2011, 09:52 »

я имел в виду, что такого делается в headerData, что позволило избавится от описанной, в теме, проблемы?
Записан

Юра.
aliks-os
Гость
« Ответ #13 : Август 26, 2011, 12:42 »

я имел в виду, что такого делается в headerData, что позволило избавится от описанной, в теме, проблемы?

Все делается вот таким образом

Код:
//При вставке строки присваивается номер новой строки
//При редактировании - номер редактируемой строки
int insRow =-1;  
bool showAsterisk = false;  //При редактировании меняется на true

QVariant SQLModel::headerData ( int section, Qt::Orientation orientation, int role ) const {
    if (orientation == Qt::Vertical) {
        //Когда после вставки новой строки ухожу на другую, то звездочку меняю на номер строки
        if (section != insRow && QSqlTableModel::headerData(section,Qt::Vertical) == "*") {
            return section+1;
        }
        //Если просто редактирую, то показываю звездочку
        if (showAsterisk && section == insRow) {
            return QVariant("*");
        }
    }
    return QSqlTableModel::headerData(section,orientation, role);
}


Т.Е. получается что сам признак Dirty для меня стал неактуальный для визуального отображение. Проблема была именно как корректно отображать звезду, ну вот таким способом я ее и победил
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #14 : Август 26, 2011, 21:20 »

ясно
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.135 секунд. Запросов: 22.