crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Делегат + QDateTimeEdit
phpCoder
  опции профиля:
сообщение 2.1.2015, 18:38
Сообщение #1


Студент
*

Группа: Неактивирован
Сообщений: 16
Регистрация: 2.12.2014
Пользователь №: 4289

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый вечер.
Есть делегат с 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
  опции профиля:
сообщение 2.1.2015, 22:27
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 67
Регистрация: 13.2.2013
Пользователь №: 3710

Спасибо сказали: 1 раз(а)




Репутация:   1  


Какая версия Qt? Случаем не в этом дело?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.1.2015, 2:42
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Стандартный делегат ведёт себя так:
Нажал Enter - редактирование прекращается и данные отправляются в модель.
Ткнул в любое другое место представления - редактирование прекращается без сохранения данных.

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

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

Сообщение отредактировал Litkevich Yuriy - 9.1.2015, 2:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 17:31