用QTableView和QSqlTableModel连接数据库,显示数据库表格后,有两个字段显示的double精确位数跟数据库的中的不一致,一列是整数显示,一列是科学计数法,于是我用了自定义委托重写了QItemDelagate,显示是没问题了,但是双击启动编辑的时候,程序崩溃了。有哪位大佬遇到过吗?该怎么解决? 或者指导下如何解决显示精度问题。求指导!
.h
class DisplayDelegate : public QItemDelegate
{
Q_OBJECT
public:
DisplayDelegate(QObject *parent = 0) : QItemDelegate(parent) { }
QWidget *createEditor(QWidget *parent) const
{
QLineEdit *editor = new QLineEdit(parent);
//QRegExp regExp("[0-9]{0,10}");
//editor->setValidator(new QRegExpValidator(regExp, parent));
return editor;
}
void setEditorData(QWidget *editor, const QModelIndex &index) const
{
QString text = index.model()->data(index, Qt::EditRole).toString();
QLineEdit *lineEdit = new QLineEdit();
lineEdit = static_cast <QLineEdit*>(editor);
lineEdit->setText(text);
}
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QLineEdit *lineEdit = new QLineEdit();
lineEdit = static_cast <QLineEdit*>(editor);
QString text = lineEdit->text();
model->setData(index, text, Qt::EditRole);
}
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option) const
{
editor->setGeometry(option.rect);
}
};
.cpp
model->setHeaderData(20, Qt::Horizontal, "结束日期");
model->setHeaderData(21, Qt::Horizontal, "钻机类型");
model->setHeaderData(22, Qt::Horizontal, "编录人员");
model->setHeaderData(23, Qt::Horizontal, "校核人员");
model->setHeaderData(24, Qt::Horizontal, "核查人员");
model->setHeaderData(25, Qt::Horizontal, "是否虚拟钻孔");
model->setHeaderData(26, Qt::Horizontal, "是否参与");
model->setHeaderData(27, Qt::Horizontal, "参与操作记录");
model->setHeaderData(28, Qt::Horizontal, "备注");
ComboBoxDelegate *comboBoxDelegate = new ComboBoxDelegate();
mainWindowUI->tableView->setItemDelegateForColumn(5, comboBoxDelegate);
DisplayDelegate *displayDelegate = new DisplayDelegate();
mainWindowUI->tableView->setItemDelegateForColumn(6, displayDelegate);
mainWindowUI->tableView->setItemDelegateForColumn(7, displayDelegate);
mainWindowUI->tableView->setEditTriggers(QAbstractItemView::DoubleClicked);
mainWindowUI->tableView->setModel(model);
|