Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Делегат + QDateTimeEdit
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
phpCoder
Добрый вечер.
Есть делегат с QDateTimeEdit. Как (с помощью какого сигнала или еще что...) можно отловить событие завершения редактирования?

Сигнал QDateTimeEdit::editingFinished не годится. Если в таблице тыкнуть на ячейку, появляется мой редактор. Далее, если тыкнуть мышью в другом месте таблицы/окна программы, то текст из редактора вставляется в ячейку, но событие того, что этот текст вставился не происходит.

Сигнал QDateTimeEdit::dateTimeChanged не годится. Как только поменяешь циферку, так сразу редактирование прекращается.

Сигналы QDateTimeEdit::dateChanged и QDateTimeEdit::timeChanged аналогично.

Что делать? Как обычно работают с таким делегатом?

Соединение делаю как в примерах:
QWidget *DateTimeDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem&, const QModelIndex&) const
{
    QDateTimeEdit *editor = new QDateTimeEdit(parent);
    connect(editor, &QDateTimeEdit::editingFinished, this, &DateTimeDelegate::_commitAndCloseEditor);
    editor->setDisplayFormat("dd.MM.yyyy hh:mm:ss");
    return editor;
}

void DateTimeDelegate::_commitAndCloseEditor()
{
    QDateTimeEdit *editor = qobject_cast<QDateTimeEdit*>(sender());
    if(this->_value == editor->text()) return;
    emit commitData(editor);
    emit editingFinished(editor->property("row").toInt(), editor->dateTime().toString(Qt::ISODate));
    emit closeEditor(editor);
}
Majestio
Какая версия Qt? Случаем не в этом дело?
Litkevich Yuriy
Стандартный делегат ведёт себя так:
Нажал Enter - редактирование прекращается и данные отправляются в модель.
Ткнул в любое другое место представления - редактирование прекращается без сохранения данных.

В стандартном делегате это реализуется через фильтр событий роль объекта-фильтра выполняет сам делегат, в его методе eventFilter() можно сделать то, что делает твой _commitAndCloseEditor().

П.С.
в Qt4 такой косяк: при ручной стратегии сохранения для QSql...TableModel после тыканья в "иное" место представление вглядит так, как буд-то данные изменились, однако при фиксации данных в БД, предсталение обновлялось показывая прежнее значение.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.