qt постоянно отображать делегата в поле зрения - PullRequest
0 голосов
/ 22 октября 2018

Как вы используете QStyledItemDelegate / QItemDelegate для постоянного отображения сложного виджета, то есть для обработки Qt.DisplayRole, а не только Qt.EditRole?

Документация ускользаетиспользовать paint () ... но это просто способ сложнее!Давайте возьмем для примера рендеринг QTreeView или QTableVeiw внутри QTableView ячейки.

Существует QAbstractItemView.setIndexWidget(), но это плохая идея, поскольку она используется только для отображения статического содержимого (и чтовеселье в статических моделях?).

Примечание

Я нашел часть ответа в другом посте , но это был лишь небольшой набор ответов, поэтому ядумал, что это оправдывает новый пост с соответствующим вопросом.

1 Ответ

0 голосов
/ 22 октября 2018

Ключ должен использовать QAbstractItemView.openPersistentEditor(), чтобы всегда держать ячейку в режиме редактирования.

Некоторые дополнительные ключевые элементы

  1. Необходимо указать флаг Qt.EditRole дляячейки, в которых используются делегаты.
  2. QStyledItemDelegate.sizeHintChanged.emit(index) необходимо вызывать каждый раз, когда изменяется размер виджета редактора.
  3. Реализация QStyledItemDelegate.sizeHint() может быть сложной и утомительной (или вы можете сделать index.internalPointer().editor_widget.sizeHint() при условии, что вы сохранили ссылку редактора на внутренний указатель во время QStyledItemDelegate.createEditor()

Внимание

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

  1. Загрузка модели постепенно с использованием потока
  2. Использование механизма fetchMore() Qt
  3. звоните openPersistentEditor постепенно (используя таймер или какони появляются в первый раз)
  4. вызов openPersistentEditor, когда родительский узел раскрыт, и closePersistentEditor, когда родительский узел свернут, и, возможно, ограничивают использование расширения всех узлов с несколькими дочерними узлами.
...