crossplatform.ru

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

kamikaze
  опции профиля:
сообщение 29.7.2009, 18:30
Сообщение #1


Новичок


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

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




Репутация:   0  


Такая вот проблема: В QTableView на колонку вешается собственный delegate, который в роли редактора использует QDoubleSpinBox. В момент редактирования кол-во знаков после запятой в норме. Как только поле теряет фокус - отображается только целая часть и в базу (через QSqlRelationalTableModel) сохраняется тоже только целая часть. Как мне получить точные значения при отображении?

Delegate:
Раскрывающийся текст
#include <QDoubleSpinBox>
#include "qrbrealeditdelegate.h"

QRBRealEditDelegate::QRBRealEditDelegate(QObject *)
{
    this->setDecimals(8);
}

QWidget *QRBRealEditDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) 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 &/* index */) 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
Причина редактирования: по многу раз "отправить" не нажимай
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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


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