2014-02-05 3 views
4

У меня есть QListView с пользовательской реализацией QItemDelegate. MyItemDelegate повторно создает createEditor() для отображения пользовательского виджета. Размер виджета зависит от содержимого. По умолчанию каждая высота строки составляет около 20 пикселей (одна строка), но мой редактор имеет большую высоту. Я пытался переопределить метод QItemDelegate :: sizeHint(), но не содержит ссылки на редактор, поэтому я не мог рассчитать правильный размер.Высота редактора в QItemDelegate

Как можно изменить размер строк в QListView до фактического размера редактора?

+0

Разве вы не рассматриваете изменение своего редактора, кроме высоты строки? Изменение размера всей строки при редактировании одного элемента выглядит как-то уродливо, ИМО. Вы можете включить раскрывающееся окно, поле со списком или так далее. – vahancho

+0

Собственно, редакторы будут постоянными. – developer

+0

Покажите код своего делегата, если мой ответ неясен для вас. –

ответ

0

Вы должны испускать layoutChanged после создания редактора, если вы не можете правильно отменить sizeHint. Но этого должно быть достаточно, чтобы переопределить sizeHint.

+0

Как этого может быть достаточно, чтобы использовать sizeHint()? У меня есть внутренний параметр sizeHint() - это (QOptionViewItem) и (QModelIndex) пареметры индекса. Одной только этой информации недостаточно. Мне нужен (QWidget) редактор сам. В общем, все, что мне нужно, это вернуть editor-> size(). – developer

+0

Просто сохраните указатель (который вы возвращаете из createEditor) текущего активного редактора в качестве члена делегата и используйте его в форматеHint. Полезно сохранить его с помощью шаблона QPointer, чтобы вы могли отслеживать расширение редактора, указав указатель нулевым. –

+0

Сохранение указателя как члена делегата выглядит сомнительным. Может случиться так, что sizeHint() будет работать с другим экземпляром редактора (я использую постоянные редакторы) – developer

Смежные вопросы