Следующий вопрос от Бенно Дильманна из списка рассылки PyQt остается без ответа с 2008 года:
[..] У меня есть подкласс QStyledItemDelegate, который реализует функцию paint() для рисования содержимого некоторых ячеек QTableView. Как заставить его рисовать прямоугольник фокуса, если одна из этих ячеек имеет фокус? Я пробовал это:
class MyDelegate(QStyledItemDelegate):
...
def paint(self, painter, option, index):
...
painter.save()
if option.state & QStyle.State_HasFocus:
self.parent().style().drawPrimitive(QStyle.PE_FrameFocusRect, option, painter)
...
painter.restore()
но это просто ничего не делает. Ошибок нет, рамки фокусировки нет. Я просто хочу, чтобы система QStyle каким-то образом рисовала обычную рамку фокуса, если одна из моих пользовательских окрашенных ячеек имеет фокус. Документация QStyle говорит мне создать QStyleOptionFocusRect и использовать initFrom(). Но для initFrom() нужен QWidget, которого в данном случае у меня нет.
Я просто не понимаю.
Каков обычный способ получить кадры фокуса в ячейках QTableView, окрашенные пользовательскими делегатами?[..]