crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
tnsr
  опции профиля:
сообщение 11.12.2013, 9:49
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 11.12.2013
Пользователь №: 4006

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем здравствуйте.

В поставке QT есть проект demos\sqlbrowser
После открытия таблицы он позволяет редактировать данные
1. Как сделать так чтобы QTableView показывал значок - запись изменена?
2. Как сделать чтобы данные сохранялись в базе MySQL?

С уважением ;o)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tnsr
  опции профиля:
сообщение 11.12.2013, 12:24
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 11.12.2013
Пользователь №: 4006

Спасибо сказали: 0 раз(а)




Репутация:   0  


Видимо по первому пункту надо использовать
model->setHeaderData(..., Qt::Horizontal, QObject::tr("*"));
А по второму SubmitAll

Остался вопрос в каких методах это делать, т.е. как это реализовать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tnsr
  опции профиля:
сообщение 11.12.2013, 16:30
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 11.12.2013
Пользователь №: 4006

Спасибо сказали: 0 раз(а)




Репутация:   0  


Если политика выставлена
model->setEditStrategy(QSqlTableModel::OnRowChange);

то нужен SubmitAll?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tnsr
  опции профиля:
сообщение 12.12.2013, 0:44
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 11.12.2013
Пользователь №: 4006

Спасибо сказали: 0 раз(а)




Репутация:   0  


В общем есть такой код:
void Browser::showTable(const QString &t)
{
    QSqlTableModel *model = new QSqlTableModel(table, connectionWidget->currentDatabase());
    model->setEditStrategy(QSqlTableModel::OnRowChange);
    model->setTable(connectionWidget->currentDatabase().driver()->escapeIdentifier(t, QSqlDriver::TableName));
    model->select();
    if (model->lastError().type() != QSqlError::NoError)
        emit statusMessage(model->lastError().text());
    table->setModel(model);
    table->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed);

    connect(table->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
            this, SLOT(currentChanged()));
    updateActions();
}

Но данные в таблицу не сбрасываюся почему?
Еще вопрос, что значит эта строка?:
    connect(table->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
            this, SLOT(currentChanged()));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.12.2013, 21:31
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(tnsr @ 11.12.2013, 18:30) *
Если политика выставленаmodel->setEditStrategy(QSqlTableModel::OnRowChange);то нужен SubmitAll?
вот именно из-за этой политики оба пункта из первого поста не имеют смысл, т.к. данные сразу же отправляются в БД (это можно было легко проверить заглянув в БД)


Цитата(tnsr @ 12.12.2013, 2:44) *
Еще вопрос, что значит эта строка?:
настраивается соединение сигнала со слотом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tnsr
  опции профиля:
сообщение 13.12.2013, 21:56
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 11.12.2013
Пользователь №: 4006

Спасибо сказали: 0 раз(а)




Репутация:   0  


Юрий, спасибо за ответ. Думал уж никто не ответит.

Цитата(Litkevich Yuriy @ 13.12.2013, 22:31) *
Цитата(tnsr @ 11.12.2013, 18:30) *
Если политика выставленаmodel->setEditStrategy(QSqlTableModel::OnRowChange);то нужен SubmitAll?
вот именно из-за этой политики оба пункта из первого поста не имеют смысл, т.к. данные сразу же отправляются в БД (это можно было легко проверить заглянув в БД)

Цитата(tnsr @ 12.12.2013, 2:44) *
Еще вопрос, что значит эта строка?:
настраивается соединение сигнала со слотом.

во второму - нашел код слота - разобрался

а по первому:
OnRowChange - изменения видимо должны сбрасываться при смене строки(может еще при каких событиях?)
но у меня ничего в базу не попадает.
может еще у кого есть qt и mysql и есть возможность проверить эту программу(она в папке demos/sqlbrowser)?
почему может не отрабатывать политика?
как это отследить? я еще ни разу не пользовался отладчиками для c++.
может подскажите как.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tnsr
  опции профиля:
сообщение 20.12.2013, 8:19
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 11.12.2013
Пользователь №: 4006

Спасибо сказали: 0 раз(а)




Репутация:   0  


Думаю, что это баг в QSqlTableView.
Видимо, остальные вручную меняют его поведение.
Буду использовать Qt5.
Диалог с разработчиком Qt
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 23:25