09 this, SLOT(commitAndCloseEditor));
10 return timeEdit;
11 } else {
12 return QItemDelegate::createEditor(parent, option, index);
13 }
14 }
Мы собираемся управлять редактированием только длительностей фонограмм, предоставляя делегату по умолчанию управление редактированием названий фонограмм. Это обеспечивается проверкой столбца, для которого запрашивается редактирование. Если это столбец длительности, создаем объект
01 void TrackDelegate::commitAndCloseEditor
02 {
03 QTimeEdit *editor = qobject_cast
04 emit commitData(editor);
05 emit closeEditor(editor);
06 }
Если пользователь нажимает клавишу Enter или убирает фокус из
01 void TrackDeIegate::setEditorData(QWidget *editor,
02 const QModelindex &index) const
03 {
04 if (index.column == durationColumn) {
05 int secs = index.model->data(index, Qt::DisplayRole).toInt;
06 QTimeEdit *timeEdit = qobject_cast
07 timeEdit->setTime(QTime(0, secs / 60, secs % 60));
08 } else {
09 QItemDelegate::setEditorData(editor, index);
10 }
11 }
Когда пользователь инициирует редактирование, представление вызывает
01 void TrackDelegate::setModelData(QWidget *editor,
02 QAbstractItemModel *model, const QModelIndex &index) const
03 {
04 if (index.column == durationColumn) {
05 QTimeEdit *timeEdit = qobject_cast
06 QTime time = timeEdit->time;
07 int secs = (time.minute * 60) + time.second;
08 model->setData(index, secs);
09 } else {
10 QItemDelegate::setModelData(editor, model, index);
11 }
12 }
Если пользователь прекращает редактирование (например, щелкнув левой кнопкой мышки за пределами виджета редактора или нажав клавишу Enter или Tab), а не отменяет его, модель должна быть обновлена данными редактора. Если редактировалась длительность, извлекаем минуты и секунды из