Такая вот проблема: В QTableView на колонку вешается собственный delegate, который в роли редактора использует QDoubleSpinBox. В момент редактирования кол-во знаков после запятой в норме. Как только поле теряет фокус - отображается только целая часть и в базу (через QSqlRelationalTableModel) сохраняется тоже только целая часть. Как мне получить точные значения при отображении?
Delegate:
#include <QDoubleSpinBox>
#include "qrbrealeditdelegate.h"
QRBRealEditDelegate::QRBRealEditDelegate(QObject *)
{
this->setDecimals(8);
}
QWidget *QRBRealEditDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
{
QDoubleSpinBox *editor = new QDoubleSpinBox(parent);
editor->setDecimals(this->decimals);
return editor;
}
void QRBRealEditDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
double value = index.model()->data(index, Qt::EditRole).toDouble();
QDoubleSpinBox *realEdit = static_cast<QDoubleSpinBox*>(editor);
realEdit->setValue(value);
}
void QRBRealEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
QDoubleSpinBox *realEdit = static_cast<QDoubleSpinBox*>(editor);
double value;
value = realEdit->value();
model->setData(index, value, Qt::EditRole);
}
void QRBRealEditDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
{
editor->setGeometry(option.rect);
}
void QRBRealEditDelegate::setDecimals(int decimals)
{
this->decimals = decimals;
}
int QRBRealEditDelegate::getDecimals()
{
return this->decimals;
}
установка делегата в QTableView:
void CurrencyCourseList::populateList(QTableView *tableView)
{
QSqlRelationalTableModel *model = new QSqlRelationalTableModel;
model->setTable("currency_rate");
model->setSort(1, Qt::AscendingOrder);
model->setEditStrategy(QSqlTableModel::OnRowChange);
model->setRelation(2, QSqlRelation("currency", "id", "code"));
model->select();
model->setHeaderData(0, Qt::Horizontal, QObject::trUtf8("ID"));
model->setHeaderData(1, Qt::Horizontal, QObject::trUtf8("Datums"));
model->setHeaderData(2, Qt::Horizontal, QObject::trUtf8("Valūta"));
model->setHeaderData(3, Qt::Horizontal, QObject::trUtf8("Kurss"));
tableView->setModel(model);
tableView->setColumnHidden(0, true);
tableView->setItemDelegateForColumn(1, this->date_delegate);
tableView->setItemDelegateForColumn(2, new QRBSqlRelationalDelegate(tableView));
tableView->setItemDelegateForColumn(3, new QRBRealEditDelegate(tableView));
}
Сообщение отредактировал Litkevich Yuriy - 29.7.2009, 20:40
Причина редактирования: по многу раз "отправить" не нажимай