Есть у меня табличка, данные которой редактирую через делегаты. Для этих делегатов мне нужно такое поведение, что бы дынные фиксировались обратно в модель, только при нажатии Enter, во всех остальных случаях происходил откат к старым данным. Не нашёл никакого другого решения, кроме как перекрыть метод eventFilter у делегата.
Для редактирования через QSpinBox, достаточно оказалось следущего кода
SpinBoxDelegate::eventFilter
bool SpinBoxDelegate::eventFilter(QObject* editor, QEvent* event )
{
QSpinBox* spinBox = static_cast<QSpinBox*>(editor);
if (event->type() == QEvent::KeyPress) {
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
if(keyEvent->key() == Qt::Key_Tab || keyEvent->key() == Qt::Key_Backtab) {
emit closeEditor(spinBox);
return true;
}
} else if (event->type() == QEvent::FocusOut) {
emit closeEditor(spinBox);
return true;
}
return QItemDelegate::eventFilter(editor, event);
}А вот для случая редактирования через QComboBox, подобного поведения никак добиться не получается
ComboBoxDelegate::eventFilter
bool ComboBoxDelegate::eventFilter(QObject* editor, QEvent* event )
{
static bool flag = false;
QComboBox* comboBox = static_cast<QComboBox*>(editor);
if (event->type() == QEvent::KeyPress) {
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
if(keyEvent->key() == Qt::Key_Tab || keyEvent->key() == Qt::Key_Backtab) {
emit closeEditor(comboBox);
return true;
} else if(keyEvent->key() == Qt::Key_Right || keyEvent->key() == Qt::Key_Left) {
return true;
}
}
return QItemDelegate::eventFilter(editor, event);
}Кто сможет подправить так, чтобы при щелчке мышкой вне комбо бокса и его выпадающего списка, редактирование закрывалось, но данные в модель не фиксировались?
Или может есть какой другой способ добиться такого поведения?
