数据库操作QTableView保存小数点的位数

1.在做项目中遇到,QTableView要求可编辑到小数点后七位,使用自定义委托,重写QStyledItemDelegate类下面的

    // editing
    QWidget *createEditor(QWidget *parent,
                          const QStyleOptionViewItem &option,
                          const QModelIndex &index) const Q_DECL_OVERRIDE;

    void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE;
    void setModelData(QWidget *editor,
                      QAbstractItemModel *model,
                      const QModelIndex &index) const Q_DECL_OVERRIDE;

    void updateEditorGeometry(QWidget *editor,
                              const QStyleOptionViewItem &option,
                              const QModelIndex &index) const Q_DECL_OVERRIDE;

2.写个小demo
.h头文件

//小数点后七位,利用QSpinBox委托进行输入限制
class DoubleSpinBoxDelegate : public QStyledItemDelegate
{
	Q_OBJECT
public:
	DoubleSpinBoxDelegate(QObject *parent = 0);
	QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
		const QModelIndex &index) const;
	void setEditorData(QWidget *editor, const QModelIndex &index) const;
	void setModelData(QWidget *editor, QAbstractItemModel *model,
		const QModelIndex &index) const;
	void updateEditorGeometry(QWidget *editor,
		const QStyleOptionViewItem &option, const QModelIndex &index) const;
};

.cpp文件

DoubleSpinBoxDelegate::DoubleSpinBoxDelegate(QObject *parent)
	: QStyledItemDelegate(parent)
{
}
QWidget* DoubleSpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,
	const QModelIndex &index) const
{
	if (QVariant::Double == index.model()->data(index, Qt::EditRole).type())
	{
		QDoubleSpinBox *pEditor = new QDoubleSpinBox(parent);
		pEditor->setFrame(false);
		pEditor->setMinimum(-180.0000000);
		pEditor->setMaximum(180.0000000);
		pEditor->setDecimals(7);
		return pEditor;
	}
	else
	{
		return QStyledItemDelegate::createEditor(parent, option, index);
	}
}
void DoubleSpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
	if (QVariant::Double == index.model()->data(index, Qt::EditRole).type())
	{
		double value = index.model()->data(index, Qt::EditRole).toDouble();
		QDoubleSpinBox *pSpinBox = static_cast<QDoubleSpinBox*>(editor);
		pSpinBox->setValue(value);
	}
	else
	{
		 QStyledItemDelegate::setEditorData(editor, index);
	}
}
void DoubleSpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
	const QModelIndex &index) const
{
	if (QVariant::Double == index.model()->data(index, Qt::EditRole).type())
	{
		QDoubleSpinBox *pSpinBox = static_cast<QDoubleSpinBox*>(editor);
		pSpinBox->interpretText();
		double value = pSpinBox->value();
		model->setData(index, value, Qt::EditRole);
	}
	else
	{
		QStyledItemDelegate::setModelData(editor, model,index);
	}
}
void DoubleSpinBoxDelegate::updateEditorGeometry(QWidget *editor,
	const QStyleOptionViewItem &option, const QModelIndex &index) const
{
	editor->setGeometry(option.rect);
}

使用方式

ui.tableView->setItemDelegateForColumn(1, new DoubleSpinBoxDelegate(this));//第一列使用代理

版权声明:本文为qq_45893999原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。