Как отменить наследование GraphicsEffect от родителя к потомку в PyQt5?
Решения найденные в сети не помогают. Воспроизводимый пример ниже. Нужно, чтобы дочерний эллипс не отбрасывал тень, а родительский так же оставался с тенью.
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsEllipseItem, QGraphicsDropShadowEffect
from PyQt5.QtGui import QColor, QRadialGradient, QPainter
from PyQt5.QtCore import Qt
class Scene(QGraphicsScene):
def __init__(self):
super(Scene, self).__init__()
self.setBackgroundBrush(QColor(230, 240, 220))
# Создание эллипсов
ellipse_parent = QGraphicsEllipseItem(0, 0, 300, 200)
ellipse_child = QGraphicsEllipseItem(50, 20, 80, 60)
# Наложение тени на родительский элемент
shadow_effect = QGraphicsDropShadowEffect()
shadow_effect.setBlurRadius(5)
shadow_effect.setOffset(5, 5)
ellipse_parent.setGraphicsEffect(shadow_effect)
# Установка дочернего элемента
ellipse_child.setParentItem(ellipse_parent)
# Отмена эффекта тени на дочернем элементе
child_shadow_effect = QGraphicsDropShadowEffect()
child_shadow_effect.setEnabled(False) # Отключение эффекта
ellipse_child.setGraphicsEffect(child_shadow_effect)
# Добавление элементов на сцену
self.addItem(ellipse_parent)
class View(QGraphicsView):
def __init__(self, scene):
super(View, self).__init__(scene)
self.setRenderHints(QPainter.Antialiasing)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
if __name__ == "__main__":
app = QApplication([])
scene = Scene()
view = View(scene)
view.show()
app.exec_()
Ответы (1 шт):
Автор решения: Павел
→ Ссылка
Никак! В документации сказано, что эффект будет наложен на все дочерние элементы.