Russian Qt Forum

Qt => Базы данных => Тема начата: DpoHro от Май 06, 2011, 10:20



Название: QSqlTableModel & QTableView редактирование целых в полях
Отправлено: DpoHro от Май 06, 2011, 10:20
Создаем модель и подключаем к TableView
Код:
	m_accountsModel = new QSqlTableModel(this, db);
m_accountsModel->setTable("accounts");
m_accountsModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
m_accountsModel->select();

m_accountsModel->setHeaderData(0, Qt::Horizontal, tr("ID"));
m_accountsModel->setHeaderData(1, Qt::Horizontal, tr("Login"));
m_accountsModel->setHeaderData(2, Qt::Horizontal, tr("Password"));
m_accountsModel->setHeaderData(3, Qt::Horizontal, tr("Status"));
m_accountsModel->setHeaderData(4, Qt::Horizontal, tr("Errors"));
m_accountsModel->setHeaderData(5, Qt::Horizontal, tr("Tryings"));

ui.m_viewAccounts->setModel(m_accountsModel);
//ui.m_viewAccounts->setColumnHidden(0, true);

Вставка:
Код:
		QModelIndex insertIndex = ui.m_viewAccounts->currentIndex();

QSqlRecord record = model->record();
//record.setValue( "id", NULL);
record.setValue( "login", ui.m_edLogin->text());
record.setValue( "password", ui.m_edPassword->text());
record.setValue( "status", 0);

int row=model->rowCount();
model->insertRow(row);
bool ok = model->setRecord(row, record);
model->submitAll();
//model->select();

Поля status, trying, errors - в бд объявлены как INTEGER.
В процессе экспериментов со вставкой получалось что они редактировались спинбоксом, автоматически.
В этом варианте - все поля редактируются эдитом.

Как назначить Спин для целых полей?


Название: Re: QSqlTableModel & QTableView редактирование целых в полях
Отправлено: Пантер от Май 06, 2011, 10:21
Свой делегат написать.


Название: Re: QSqlTableModel & QTableView редактирование целых в полях
Отправлено: DpoHro от Май 06, 2011, 11:04
Понятно, а при
EditStrategy - OnManualSubmit
Как правильно отлавливаются изменения при редактировании полей для последующего сабмита?


Название: Re: QSqlTableModel & QTableView редактирование целых в полях
Отправлено: aliks-os от Май 09, 2011, 14:30
При переопределении делегата, поищи сигнал editingFinished(). Кроме того, можешь поработать с commitData() closeEditor().
В принципе эта тема довольно таки описана на этом сайте.