当您要编辑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。
答案 0 :(得分:0)
原来很容易。我在代理中重新实现了updateEditorGeometry
如下,并且照顾它!
void MapTextDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const {
QStyledItemDelegate::updateEditorGeometry(editor, option, index);
editor->setGeometry(option.rect);
}