Qt model-view: как подавить model :: data DecorationRole, когда активен редактор ячеек QTableView - PullRequest
0 голосов
/ 14 октября 2010

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

Оказывается очень легко.Я переопределил updateEditorGeometry в делегате следующим образом, и это позаботилось об этом!

void MapTextDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const {
  QStyledItemDelegate::updateEditorGeometry(editor, option, index);
  editor->setGeometry(option.rect);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...