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

时间:2010-10-14 02:40:13

标签: qt qt4

当您要编辑QLineEdit子类中的单元格时,我有一个委托来创建QTableView控件。在我的模型的data函数中,我最近添加了一个案例,为某些项目返回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都很陌生。

有什么想法吗?我正在使用Qt 4.7。

1 个答案:

答案 0 :(得分:0)

原来很容易。我在代理中重新实现了updateEditorGeometry如下,并且照顾它!

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