|
1Qter豆
使用tableWidget做电子表格,为了防止用户输入不合适的数据,就给tableWidget的item设置了lineEdit代理并添加浮点型验证器,把输入内容限制为“数字”;
目前这个功能实现了,不过还有一个需求就是“在某些情况下,电子表格的内容需要被清空”,但是设置代理后,单元格内容不能清空了,请问怎么解决呢?
相关代码如下,能不能给doubleValidator添加“清空”的验证呢?十分感谢!
- QWidget *centralDelegateMotionAxes::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
- {
- if (index.isValid()) {
- QLineEdit *lineedit = new QLineEdit(parent);
- // 居中显示
- lineedit->setAlignment(Qt::AlignCenter);
- lineedit->setStyleSheet(QString(":focus{background-color: lightGray;}")); // TODO: 分析此句代码
- QDoubleValidator *doubleValidator = new QDoubleValidator(-360.00, 360.00, 2); // 无效
- doubleValidator->setBottom(-360.00);
- doubleValidator->setTop(360.00); // 无效
- lineedit->setValidator(doubleValidator);
- lineedit->installEventFilter(const_cast<centralDelegateMotionAxes *>(this)); // TODO: ???
- return lineedit;
- } else {
- return QItemDelegate::createEditor(parent, option, index);
- }
- }
- void centralDelegateMotionAxes::setEditorData(QWidget *editor, const QModelIndex &index) const
- {
- if (index.isValid()) {
- QString value = index.model()->data(index, Qt::DisplayRole).toString();
- QLineEdit *lineedit = static_cast<QLineEdit *>(editor);
- lineedit->setText(value);
- } else {
- QItemDelegate::setEditorData(editor, index);
- }
- }
- void centralDelegateMotionAxes::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
- {
- if (index.isValid()) {
- QLineEdit *lineedit = static_cast<QLineEdit *>(editor);
- model->setData(index, lineedit->text());
- } else {
- QItemDelegate::setModelData(editor, model, index);
- }
- }
复制代码
|
|