Определите, имеет ли QTableView открытого редактора

Есть ли любой способ определить если a QTableView имеет открытый редактор в текущей ячейке? Я должен обработать следующую ситуацию:

  • Пользователь дважды щелкает по ячейке и редактирует данные, но оставляет ячейку в состоянии "редактирования".
  • На другой части UI меры приняты, который изменяет выбранную строку базовой модели.
  • Назад на моем представлении, я хочу определить, совпадает ли недавно выбранная строка с открытой строкой. В противном случае я должен принять меры. (Предложите пользователю? Фиксировать автоматически? Вернуться?)

Я вижу, как получить текущий объект и могу получить делегата на том объекте, но я не вижу никого isEditMode() свойство я надеялся найти.

Кто-то может указать на меня в правильном направлении?

9
задан Dave Mateer 6 August 2010 в 18:59
поделиться

1 ответ

Создайте подкласс своего делегата, чтобы он включал аксессор, который сообщает вам, когда он редактирует:

void MyDelegate::setEditorData ( QWidget * editor, const QModelIndex & index ) const {
    // _isEditing  will have to be mutable because this method is const
    _isEditing = true; 
    QStyledItemDelegate::setEditorData(editor, index);
}

void MyDelegate::setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const {
    QStyledItemDelegate::setModelData(editor, model, index);
    _isEditing = false;
}

bool MyDelegate::isEditing() const { return _isEditing; }

Затем вы можете просто проверить делегата, чтобы увидеть, что происходит. В качестве альтернативы и / или если вам не нравится изменяемый , вы можете подавать сигналы, чтобы знать, в каком состоянии находится делегат.

2
ответ дан 4 December 2019 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: