У меня есть делегат для создания элемента управления 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.