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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Добавление строки  (Прочитано 10403 раз)
cya-st
Гость
« : Январь 27, 2010, 17:58 »

Всем привет. Я переопредилил
Код:
    QVariant data(const QModelIndex &index, int role) const
    {
        if(role == Qt::TextColorRole)
{
    if(index.column() == 0)
return QVariant(QColor(Qt::darkGray));
}

if(role == Qt::TextAlignmentRole)
{
    if(index.column() == 0)
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
        }

        return QSqlQueryModel::data(index, role);
    }
в класе QSqlTableModel, того что хотел добился, но при добавлении новой записи в таблицу через QTableView запись не отображается когда я перехожу для ввода следующего поля в строке. Надеюсь правильно выразился. Никто не сталкивался с такой ошибкой?
Записан
cya-st
Гость
« Ответ #1 : Январь 27, 2010, 18:23 »

Еще одна проблема, в таблице (PostgreSQL) есть поле: nm character varying(20) NOT NULL. Из программы в через QTableView, когда я добавляю строку и это поле оставляю пустым, то запись все равно записывается в таблицу с значением поля Nm - две одинарные кавычки, хотя не должно было добавить запись.
Записан
cya-st
Гость
« Ответ #2 : Январь 27, 2010, 22:18 »

Кто нибудь может мне помочь в этом вопросе?
Записан
MoPDoBoPoT
Гость
« Ответ #3 : Январь 28, 2010, 00:21 »

Насчет первой проблемы скорей всего дело в этом:  return QSqlQueryModel::data(index, role)  Улыбающийся
Записан
cya-st
Гость
« Ответ #4 : Январь 28, 2010, 12:49 »

Насчет первой проблемы скорей всего дело в этом:  return QSqlQueryModel::data(index, role)  Улыбающийся
Да, недоглядел.
А на счет второй проблемы?
Записан
MoPDoBoPoT
Гость
« Ответ #5 : Январь 28, 2010, 14:07 »

Странная ошибка. А больше ничего не переопределял? Например, setData()?
Такое ощущение, что грешок за QSqlTableModel::insertRowIntoTable(). Продебаж этот метод и посмотри какие значения имеют поля в переданной в него структуре QSqlRecord.
Записан
cya-st
Гость
« Ответ #6 : Январь 28, 2010, 17:57 »

Убрал переопределение, ошибка та же. Добавляю строку так:
Код:
    int row = model.rowCount();
    model.insertRow(row);
    QModelIndex ind = model.index(row, 1);
    ui->tableView->setCurrentIndex(ind);
    ui->tableView->edit(ind);
Записан
crossly
Гость
« Ответ #7 : Январь 28, 2010, 19:06 »

думаю грешок за драйвером....
Записан
MoPDoBoPoT
Гость
« Ответ #8 : Январь 28, 2010, 20:23 »

Хз, ща просмотрел qsql_psql.cpp и не нашел там косяка. Конечно я не досконально все изучил там...
В общем, если в ячейке стоит значение отвечающее QVariant::isNull() == true, то в подготовленный запрос перетается NULL.
Записан
cya-st
Гость
« Ответ #9 : Январь 29, 2010, 00:23 »

Сделал так:
Код:
//...
model.setEditStrategy(QSqlTableModel::OnManualSubmit);
//...
//Add record
model.insertRows(model.rowCount(), 1);
//...
//Save record
model.submitAll();
if( model.lastError().isValid() )
    QMessageBox::warning(this,tr("Error"), model.lastError().text());
Заработало.
Всем спасибо за ответы.
Записан
cya-st
Гость
« Ответ #10 : Февраль 08, 2010, 22:48 »

Вынужден вернутся к обсуждению этой проблемы. После выполнения команды model.insertRows(model.rowCount(), 1); и в tableView я не ввожу данные в поле Nm, то возникает предупреждение БД (...Поле Nm не может быть пустым...) так и должно быть. Но если после команды model.insertRows(model.rowCount(), 1); в tableView я просто щелкну мышкой на поле Nm, то в таблицу записывается запись и поле Nm со значением - две одинарные кавычки.
Помогите пожалуйста, уже не знаю где копать, может это глюк QTableView?
Записан
cya-st
Гость
« Ответ #11 : Февраль 08, 2010, 23:18 »

Может проблема в том, что БД в PostgreSQL в кодировке Win1251?
Записан
cya-st
Гость
« Ответ #12 : Февраль 09, 2010, 11:21 »

Проверил, проблема не в кодировке.
Записан
MoPDoBoPoT
Гость
« Ответ #13 : Февраль 09, 2010, 14:47 »

Где-то накосячено с экранированием апострофа, надо дебажить.
Записан
cya-st
Гость
« Ответ #14 : Февраль 09, 2010, 15:04 »

Где-то накосячено с экранированием апострофа, надо дебажить.
Не может быть, я создал порядка двух тестовых приложений, проблема присутствует. Уверен если вы создадите тоже простенькое приложение с редактированием в QTableView, то проблема будет такой же как у меня.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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