找回密码
 立即注册
收起左侧

用QTableView自定义委托显示数据库表格时,双击编辑崩溃

1
回复
556
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2021-5-7 09:23:54 显示全部楼层 |阅读模式
1Qter豆
用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);

回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2021-5-8 17:42:11 显示全部楼层
遇到bug不先调试吗?先看看崩溃在哪句?再排查原因,是越界还是什么?从这段代码看不出什么吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册