Изменить вид курсора в делегате - PullRequest
1 голос
/ 04 ноября 2019

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

Я вижу, что есть решения к этому типу проблем, но кажется, что все они связаны с изменениями модели таблицы или кода представления, а не кода делегата. (Связанное решение не будет работать внутри делегата, потому что делегат не получает никаких событий, когда курсор не находится над ячейкой, назначенной делегату, поэтому невозможно было бы восстановить стандартный внешний вид курсора после того, как курсор покинулячейка.)

Было бы неплохо иметь делегата, который поддерживает эту функцию при использовании в разных таблицах.

1 Ответ

0 голосов
/ 08 ноября 2019

Сотрудник дал мне хорошее решение этой проблемы. Когда делегат инициализируется, ассоциированное представление должно быть предоставлено в качестве его родителя. Затем делегат может установить себя в качестве фильтра событий для области просмотра представления. После этого вы можете определить метод eventFilter(), который может перехватывать события даже за пределами ячеек, использующих делегат, что позволит вам изменять внешний вид курсора, когда он покидает ячейки.

class CursorDelegate(QtWidgets.QStyledItemDelegate):
    def __init__(self, parent):
        super().__init__(parent)
        parent.setMouseTracking(True)
        parent.viewport.installEventFilter(self)

    def eventFilter(self, viewport, event):
        ...

Вероятно, это плохая форма, чтобы получить такое представление от делегата, но это лучшее решение, которое я мог найти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...