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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Добавление строки  (Прочитано 9620 раз)
MoPDoBoPoT
Гость
« Ответ #15 : Февраль 09, 2010, 15:24 »

Или ты хочешь, чтобы тебе также вылетало предупреждение? Если да, то надо будет на нужный столбец/столбцы повесить свой делегат, и вот почему:
Когда ты всталяешь новую запись и не трогаешь это текстовое поле, то в модели там записан QVariant(QVariant::String) или QVariant(QString()), что тоже самое. В этом случае в это поле QSqlTableModel пытается запись в БД NULL-значение, которое запрещено по ограничению целостности. НО когда ты щелкаешь по этому полю, делегат содает для него эдитор (скорей всего QLineEdit). Этот эдитор возвращает QString, который делегат запишет в модель. Так вот, если в эдиторе ничего не будет введено, то запишется пустая строка - "", то не "инвалид"  Улыбающийся как раньше.
Короче, нужен делегат примерно с таким методом setModelData():
Код:
...
void TextDelegat::setModelData(QWidget *editor, QAbstractItemModel *model,
                                  const QModelIndex &index) const
{
    QLineEdit *lineEdit = static_cast<QLineEdit *>(editor);
    if (lineEdit->text().isEmpty()) {
        model->setData(index, QVariant(QVariant::String), Qt::EditRole);
        return;
    }

    model->setData(index, lineEdit->text(), Qt::EditRole);
}
...
Записан
MoPDoBoPoT
Гость
« Ответ #16 : Февраль 09, 2010, 15:24 »

Не может быть, я создал порядка двух тестовых приложений, проблема присутствует. Уверен если вы создадите тоже простенькое приложение с редактированием в QTableView, то проблема будет такой же как у меня.
Я имел ввиду не у тебя, а в исходниках Qt.
Записан
cya-st
Гость
« Ответ #17 : Февраль 09, 2010, 16:10 »

Спасибо. Попробую, но позднее, а то я с перепугу Улыбающийся начал Qt 4.6.1 ставить.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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