Подскажите подходящий сигнал для редактирования БД. Необходимо сразу после редактирования пользователем ячейки таблицы послать запрос в БД об изменении данных. Стандартные QSqlTableModel::OnFieldChange
и QSqlTableModel::OnRowChange
метода setEditStrategy не подходят.
Кусок проблемного кода:
modelUserDatabase = new QSqlRelationalTableModel();
modelUserDatabase->setTable("cmp_words_translation");
modelUserDatabase->setRelation(1, QSqlRelation("en_words", "id", "en_word"));
modelUserDatabase->setRelation(2, QSqlRelation("ru_words", "id", "ru_word"));
modelUserDatabase->removeColumn(0);
modelUserDatabase->select();
modelUserDatabase->setEditStrategy(QSqlTableModel::OnManualSubmit);
viewUserDatabase = new QTableView();
viewUserDatabase->setAlternatingRowColors(true);
viewUserDatabase->setModel(modelUserDatabase);
viewUserDatabase->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//Собственно проблема тут
QObject::connect(modelUserDatabase, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(changeWordInDictionary(QModelIndex,QModelIndex)));
mainLayout->addWidget(viewUserDatabase);
P.S. Сигнал dataChanged(QModelIndex,QModelIndex)
посылается только при изменении первого столбца таблицы. Он бы подошел, если бы посылался и при изменении второго столбца.
О наследовании я также уже думал и не нашел подходящего метода\слота, из которого можно было бы эмитнуть свой сигнал. Нашел только в QTableWidget метод itemChanged, но виджет наследуется от QTableView и не подходит под задачу.
Попробуйте, унаследовав модель, переопределить метод setData()
, в котором и вызывайте submitAll()
модели после того, как успешно выполнится его базовый вариант. То есть:
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) {
if(QSqlTableModel::setData(index, value, role)) submitAll();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок