Я пытаюсь сохранить значения Date из приложения Qt в базе данных SQLite как целые числа.
Я создал делегат даты с этими функциями:
QWidget* DateDelegate::createEditor(QWidget* parent,
const QStyleOptionViewItem& option,
const QModelIndex& index) const
{
QDateTimeEdit* editor = new QDateTimeEdit(parent);
editor->setDisplayFormat("dd.MM.yyyy");
editor->setCalendarPopup(true);
editor->setDateTime(QDateTime::fromSecsSinceEpoch(index.data().toLongLong()*86400));
return (editor);
}
void DateDelegate::setEditorData(QWidget* paramEditor, const QModelIndex &index) const
{
QDateTimeEdit* editor = static_cast<QDateTimeEdit*>(paramEditor);
editor->setDateTime(QDateTime::fromSecsSinceEpoch(index.data().toLongLong()*86400));
}
void DateDelegate::setModelData(QWidget *paramEditor, QAbstractItemModel *model, const QModelIndex& index) const
{
QDateTimeEdit *editor = static_cast<QDateTimeEdit *>(paramEditor);
model->setData(index, editor->dateTime().toSecsSinceEpoch()/86400);
}
И модель DTMCode SubClassed только с данными () переопределена:
QVariant DTModel::data(const QModelIndex &index, int role) const
{
if (role!=Qt::DisplayRole) {
return QSqlTableModel::data(index,role);
}
if (index.column() != fieldIndex("datnaskld")) {
return QSqlTableModel::data(index,role);
}
QVariant value = QDateTime::fromSecsSinceEpoch(QSqlQueryModel::data(index, role).toInt()*86400).toString("dd.MM.yyyy");
return value;
}
Числа отображаются в основном какдаты.
Но у меня проблема: когда поле вводится в режиме редактирования, дата всегда изменяется на 01.01.1970 (означает 0 внутри)
Чего здесь не хватает? ..
Другая проблема заключается в том, что setItemDelegateForColumn () не работает должным образом.У меня есть эта команда в коде:
ui->tableViewP->setItemDelegateForColumn(m->fieldIndex("datnaskld"), new DateDelegate(ui->tableViewP));
Но делегат присваивается всем столбцам, а не только указанному столбцу.Поэтому я добавил эти странные команды в делегат:
if (index.column() != fieldIndex("datnaskld")) {
return QSqlTableModel::data(index,role);
}