QItemDelegate с пользовательским виджетом представления

Qt 5.5 имеет виртуальный метод для определения пользовательского виджета для режима редактирования:

QWidget *createEditor(QWidget *parent,const QStyleOptionViewItem & option ,const QModelIndex & index ) const

Но как использовать пользовательский виджет для переопределения режима «просмотра»? Я видел пример делегата «звездный рейтинг», где используется метод paint, но это не то, что мне нужно. Мне нужно показать пользовательский виджет, который содержит внутри себя другие стандартные виджеты, и использовать его в режиме просмотра QTableView или QListView. Не нужно возиться с рисованием указателей и рисунков — просто покажите пользовательский виджет (который имеет файл .ui) и содержит другие стандартные виджеты с их поведением.

Например: Существует приложение менеджера загрузок, которое может отображать загрузки в виде таблицы или списка. QListView со списком загрузок. Каждая загрузка имеет URL-адрес, заголовок, общий размер, загруженный размер, индикатор выполнения, кнопку «Пауза», кнопку «Удалить», кнопку «Возобновить». Все они могут быть столбцами в таблице (QTableView) или составлены аналогично HTML DIV в одной ячейке (виджет QListView).

Как этого добиться? Есть ли что-нибудь похожее на QWidget *createViewer(... ?

QtWidgets не используются без QML.


person Zelid    schedule 27.10.2015    source источник
comment
Почему это должен быть виджет в режиме просмотра?   -  person vahancho    schedule 27.10.2015
comment
@vahancho очень распространенный пример - QListView со списком загрузок. Каждая загрузка имеет URL-адрес, заголовок, общий размер, загруженный размер, индикатор выполнения, кнопку «Пауза», кнопку «Удалить», кнопку «Возобновить». Все они могут быть столбцами в таблице (QTableView) или составлены аналогично HTML DIV в одной ячейке (виджет QListView).   -  person Zelid    schedule 27.10.2015
comment
Вы можете попробовать использовать функции QListWidget и QListWidget::openPersistentEditor(), чтобы отобразить редактор в режиме просмотра.   -  person vahancho    schedule 27.10.2015


Ответы (1)


Для статического контента вы можете использовать QAbstractItemView::setIndexWidget.

Для динамического содержимого единственным вариантом является реализация метода paint в классе делегатов.

person hank    schedule 28.10.2015