Qt模型视图:当QTableView单元格编辑器处于活动状态时,如何抑制model::data DecorationRole

Qt模型视图:当QTableView单元格编辑器处于活动状态时,如何抑制model::data DecorationRole,qt,qt4,Qt,Qt4,当您想要编辑我的QTableView子类中的单元格时,我有一个委托来创建QLineEdit控件。在我的模型的数据函数中,我最近添加了一个case来为某些项返回Qt::DecorationRole的图标 当用户编辑具有图标的单元格时,他们输入的值可能会导致图标消失。这一切都正常工作 问题是,如果用户仍在单元格中键入时图标消失,我的QLineEdit控件的大小仍然与单元格中有图标一样,但由于不再有图标,用户正在键入的部分文本将显示在图标原来所在的位置 因此,我想让我的委托大小在QLineEdit编辑

当您想要编辑我的QTableView子类中的单元格时,我有一个委托来创建QLineEdit控件。在我的模型的数据函数中,我最近添加了一个case来为某些项返回Qt::DecorationRole的图标

当用户编辑具有图标的单元格时,他们输入的值可能会导致图标消失。这一切都正常工作

问题是,如果用户仍在单元格中键入时图标消失,我的QLineEdit控件的大小仍然与单元格中有图标一样,但由于不再有图标,用户正在键入的部分文本将显示在图标原来所在的位置

因此,我想让我的委托大小在QLineEdit编辑器中填充整个单元格,即使存在图标,这样在编辑时图标将不可见,或者我认为更好的是,让委托在编辑时抑制Qt::DecorationRole返回的任何内容

目前,我的委托具有以下功能:

QWidget *MapTextDelegate::createEditor(QWidget *parent,
                                        const QStyleOptionViewItem & /*option*/,
                                        const QModelIndex & /*index*/) const {
  QLineEdit *line_editor;
  line_editor = new QLineEdit(parent);
  connect(line_editor, SIGNAL(textChanged(QString)),
          this, SLOT(MapTextChanged()));
  return line_editor;
}

QSize MapTextDelegate::sizeHint(const QStyleOptionViewItem &/*option*/,
                                 const QModelIndex &/*index*/) const
{
  QLineEdit *line_editor = new QLineEdit();
  return line_editor->sizeHint();
}
我在委托中看不到与编辑器大小有关的任何其他内容。我不太熟悉如何使用委托——实际上,我对C++和QT.</P>很陌生。
有什么想法吗?我正在使用Qt4.7。

结果证明非常简单。我在委托中重新实现了UpdateDitorGeometry,如下所示,这就解决了它

void MapTextDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const {
  QStyledItemDelegate::updateEditorGeometry(editor, option, index);
  editor->setGeometry(option.rect);
}