Я разрабатываю приложение Qt, используя QTreeView
и QAbstractItemModel
. Модель содержит несколько разнородные данные, что требует различных элементов управления для редактирования. Я реализую его с помощью специального делегата, который запрашивает model.data(Qt::EditRole)
, и модель возвращает QWidget
для использования в качестве редактора.
Мне нравится, как это работает для QLineEdit
— когда я нажимаю Enter, автоматически вызывается delegate::setModelData
, поэтому мне не нужно подключать QLineEdit::editingFinished
к QAbstractItemDelegate::setModelData()
, что очень удобно, поскольку QLineEdit возвращается из модели как QWidget
делегату, и ему все равно, что это за виджет. С QComboBox
это немного сложно - я хочу, чтобы comboBox зафиксировался после того, как выбор сделан, пока я могу сделать это только с помощью connect(myComboBox, SIGNAL(activated(QString)), myDelegate, commitData()));
Однако мой делегат не знает тип виджета редактора, и я не хочу редактировать код делегата для каждого нового редактора, который модель передает ему. Мне бы очень хотелось, чтобы выпадающий список делал то же самое, что и QLineEdit, когда нажимается ввод в слоте, подключенном к его сигналу activated()
.
Итак, что же делает QLineEdit
для вызова делегата setModelData
? Есть ли в Qt общий способ для редактора сказать: «Я закончил редактирование, взял данные и передал их модели»?