Muhammad Bashir Al-Noimi schreef op 25-1-2014 12:13:
> On 01/22/2014 10:24 AM, André Somers wrote:
>> If you want to modify it at the 'view' end, you should use a
>> QStyledItemDelegate subclass and install that on the view, or on a
>> specific column of the view.
> I did that exactly but unfortunately it didn't work :(
>
> May you please tell me what's wrong?!
Your delegate is dealing with the editor, but not with the display. Try 
reimplementing the displayText method. Also, check if the data type you 
get from the database really is numerical. SQLite can be weird with data 
types in my experience.

André

> I'm still get "5.25446e+06" for "5254458.963"
>
> I call the following:
> ---
>           ui->tableView->setModel(_tableModel);
>           ui->tableView->resizeColumnsToContents();
>
>           EcsLongDigitDelegate *delegate = new EcsLongDigitDelegate;
>           ui->tableView->setItemDelegateForColumn(2, delegate);
> ---
>
> Database table (SQLite):
> ---
> CREATE TABLE "names" ("id" INTEGER PRIMARY KEY  NOT NULL
> ,"nam_full_name" TEXT,"nam_id" DOUBLE DEFAULT (null) );
> ---
>
> Delegate class:
> ---
> #include "ecslongdigitdelegate.h"
>
> EcsLongDigitDelegate::EcsLongDigitDelegate(QObject *parent) :
>       QStyledItemDelegate(parent)
> {
> }
>
> QWidget *EcsLongDigitDelegate::createEditor(QWidget *parent, const
> QStyleOptionViewItem &option, const QModelIndex &index) const
> {
>       QDoubleSpinBox *editor = new QDoubleSpinBox(parent);
>       editor->setFrame(false);
>       editor->setMinimum(0);
>       editor->setDecimals(3);
>       editor->setMaximum(999999999999);
>       return editor;
> }
>
> void EcsLongDigitDelegate::setEditorData(QWidget *editor, const
> QModelIndex &index) const
> {
>       double value = index.model()->data(index, Qt::DisplayRole).toDouble();
>       QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
>       spinBox->setValue(value);
> }
>
> void EcsLongDigitDelegate::setModelData(QWidget *editor,
> QAbstractItemModel *model, const QModelIndex &index) const
> {
>       QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
>       spinBox->interpretText();
>       double value = spinBox->value();
>       model->setData(index, value, Qt::DisplayRole);
> }
>
> void EcsLongDigitDelegate::updateEditorGeometry(QWidget *editor, const
> QStyleOptionViewItem &option, const QModelIndex &index) const
> {
>       editor->setGeometry(option.rect);
> }
> ---
>

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to