У меня следующая проблема с каркасом модель / представление QT. Я хочу визуализировать виджет внутри элемента представления таблицы.
Сначала я подумал об использовании
void QAbstractItemView::setIndexWidget( const QModelIndex & index, QWidget * widget )
Но документация для этой функции прямо гласит:
Эта функция должна использоваться только для
отображать статический контент в пределах
видимая область, соответствующая предмету
данных. Если вы хотите отобразить пользовательские
динамический контент или реализовать пользовательский
виджет редактора, подкласс QItemDelegate
вместо этого.
Поэтому они предлагают использовать делегатов здесь. Ну, пока все хорошо. Я знаю, что делегаты могут быть использованы для создания редактора, которым может быть любой виджет QT. Но здесь есть проблема - я не хочу, чтобы этот виджет был редактором - я хочу отображать элемент с этим виджетом всегда. И не просто «рендер», мне нужно, чтобы он точно описывал поведение виджета.
Теперь виджет, который я хочу использовать - это пользовательский виджет, который является контейнером некоторых других виджетов (несколько флажков, несколько кнопок с некоторым макетом).
Решение, которое я рассматриваю, выглядит следующим образом:
- Перенесите внешний вид моего пользовательского виджета в растровое изображение.
- Позвольте делегату нарисовать себя, используя это растровое изображение.
- Когда мышь находится над элементом, вид автоматически начинает редактирование (я не
знаю, как это сделать, но я полагаю, это возможно)
- Пусть делегат создаст мой виджет в качестве редактора для элемента.
Кажется, это решение работает, но пахнет плохо для меня. Может кто-нибудь что-нибудь о более элегантном решении этой проблемы?
Спасибо.