如何在 Qt 中将 QGraphicsEffect 添加到 QAbstractItemView?

How to add a QGraphicsEffect to a QAbstractItemView in Qt?

我正在尝试将 QGraphicsEffect 添加到 QAbstractItemView(可能是 QListViewQTableView,它们应该都相似)在Qt(在 Python 2.7 中使用 PySide2,但应该适用于任何使用 Qt 的语言)。

我怀疑由于项目视图小部件在每个项目的基础上使用渲染委托等呈现自己的方式,它们不能很好地播放并且没有解决方案。我找不到对它的引用明确地在文档中不工作,所以它似乎应该工作(我的意思是,它们是 QWidget 的子类,它支持 QGraphicsEffects。看起来像一个implementation/documentation 中的可能疏忽)。任何人都可以确认或帮助正确的方法来做或解决这个问题吗?

用模糊效果演示的示例:

from PySide2 import QtWidgets, QtGui, QtCore

lw = QtWidgets.QListWidget()
lw.addItems(["dog", "cat", "fish", "platypus"])
lw.show()

ge = QtWidgets.QGraphicsBlurEffect()
lw.setGraphicsEffect(ge)
ge.setBlurRadius(20)

btn = QtWidgets.QPushButton("so fuzzy!")
btn.show()

ge = QtWidgets.QGraphicsBlurEffect()
btn.setGraphicsEffect(ge)
ge.setBlurRadius(20)

截图:

您必须对视口应用效果:

from PySide2 import QtWidgets

app = QtWidgets.QApplication()

lw = QtWidgets.QListWidget()
lw.addItems(["dog", "cat", "fish", "platypus"])
lw.show()

ge = QtWidgets.QGraphicsBlurEffect()
lw<b>.viewport()</b>.setGraphicsEffect(ge)
ge.setBlurRadius(20)

btn = QtWidgets.QPushButton("so fuzzy!")
btn.show()

ge2 = QtWidgets.QGraphicsBlurEffect()
btn.setGraphicsEffect(ge2)
ge2.setBlurRadius(20)

app.exec_()