Можно ли отключить голубую мышь при выделении QTreeWidgetItem?

У меня есть QTreeWidget, и мне нужно отключить выделение мышью дочерних элементов, но не выбор щелчка. Дело в том, что мне нужно установить это для каждого элемента, потому что некоторые из них можно выбрать. Я думал о сигнале QTreeWidget::itemEntered, чтобы проверить, должен ли элемент быть выделен или нет, но я не могу заставить его работать, потому что в описании сказано

Для работы этой функции необходимо включить отслеживание мыши в QTreeWidget.

и я не могу понять как.

Итак, мои вопросы: как я могу включить отслеживание мыши?

Есть ли более простой способ отключить подсветку?


person Nitro.de    schedule 05.06.2015    source источник
comment
Не уверен, что проще, но стандартный способ здесь - написать делегата.   -  person Amartel    schedule 05.06.2015
comment
Ну @МаркоА. Кажется, я просто пропустил это xD   -  person Nitro.de    schedule 05.06.2015


Ответы (2)


Просто вызовите setMouseTracking(), чтобы включить отслеживание мыши для определенного виджета. .

person Marco A.    schedule 05.06.2015
comment
вы тоже знаете, как отключить подсветку? Есть флаг, событие или что-то в этом роде? - person Nitro.de; 05.06.2015
comment
Это может быть хорошей отправной точкой, поскольку это проблема стиля - person Marco A.; 05.06.2015
comment
Да, я думал о таблице стилей, но это не сработает, потому что это для всех элементов QTableView::item. Невозможно установить таблицу стилей для каждого элемента, поэтому мне нужен другой способ для этого =( - person Nitro.de; 05.06.2015
comment
Не уверен, что правильно понял, что с селектором фокуса? stackoverflow.com/a/24819698/1938163 - person Marco A.; 05.06.2015

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

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

MyTreeWidget::item:hover {
    background-color: transparent
}

Это помогло мне. К сожалению, это делает обратную связь невидимой все время, а не позволяет включать и выключать ее.

Итак, в качестве следующего шага, когда мне это было нужно, я реализовал свою собственную обратную связь, используя делегата и перезаписав функцию paint. QTreeView перезаписывает mouseMoveEvent и отправляет делегату координаты мыши. Таким образом, делегат может адаптировать то, что он делает в paint, к этой позиции. Он кажется довольно тяжелым и немного грязным, но он работает. Делегат также должен позволять иметь различное поведение для разных элементов.

PS: Если вы используете делегата, в большинстве случаев этого должно быть достаточно без изменения qss. В моем случае это было не так, потому что я вызываю QStyledItemDelegate::paint в своем перезаписанном методе paint, поэтому я унаследовал нежелательное поведение.

person Andéol Evain    schedule 02.05.2018