У меня есть QTableView, который заполняется с помощью QSqlTableModel из Sqlite-базы.
В таблице есть числовые поля (были объявлены как numeric).
Хотелось бы, чтобы в QTableView для их правки использовался QDoubleSpinBox.
Примеры в сети указывают на то, что нужно создавать свой класс, унаследованный от Q(Styled)ItemDelegate и делать все ручками.
Однако, читая документацию получаем:
The standard views provided with Qt use instances of QItemDelegate to provide editing facilities. This default implementation of the delegate interface renders items in the usual style for each of the standard views: QListView, QTableView, and QTreeView.
All the standard roles are handled by the default delegate used by the standard views. The way these are interpreted is described in the QItemDelegate documentation.
Т.е. стандартный QTableView использует дефолтный QItemDelegate, если не указано иное.
When editing data in an item view, QItemDelegate provides an editor widget, which is a widget that is placed on top of the view while editing takes place. Editors are created with a QItemEditorFactory; a default static instance provided by QItemEditorFactory is installed on all item delegates.
Т.е. для редактирования QItemDelegate использует дефолтный QItemEditorFactory, если не указано иное.
The standard factory implementation provides editors for a variety of data types. These are created whenever a delegate needs to provide an editor for data supplied by a model. The following table shows the relationship between types and the standard editors provided.
...
double: QDoubleSpinBox
Т.е. дефолтная реализация QItemEditorFactory должна предоставлять QDoubleSpinBox для редактирования данных с типом Double.
Где фундаментальная ошибка в моих рассуждениях и почему на самом деле такого не происходит? На всякий случай пример моего кода будет в первом комментарии.
qitemdelegate, qsqltablemodel, qt, qtableview