Я протестировал настроенный QGraphicsEffect и обнаружил странный случай.
Я применил EFFECT к своему диалогу, и он не работает в QListView.
Вот простой тест,
from PySide2.QtCore import Qt, QPoint
from PySide2.QtWidgets import QDialog, QGraphicsEffect, QVBoxLayout, QHBoxLayout, QPushButton, QApplication, QListView, QTreeView, QTableView
from PySide2.QtGui import QTransform
import sys
class DarkenEffect(QGraphicsEffect):
def draw(self, painter):
offset = QPoint()
if self.sourceIsPixmap():
pixmap = self.sourcePixmap(Qt.LogicalCoordinates, offset)
else:
pixmap = self.sourcePixmap(Qt.DeviceCoordinates, offset)
painter.setWorldTransform(QTransform())
painter.setBrush(Qt.black)
painter.drawRect(pixmap.rect())
painter.setOpacity(0.5)
painter.drawPixmap(offset, pixmap)
class Dialog(QDialog):
def __init__(self, parent=None):
QDialog.__init__(self, parent)
self.setupUi()
effect = DarkenEffect(self)
self.setGraphicsEffect(effect)
def setupUi(self):
layout = QVBoxLayout()
self.setLayout(layout)
listview = QListView()
layout.addWidget(listview)
treeview = QTreeView()
layout.addWidget(treeview)
tableview = QTableView()
layout.addWidget(tableview)
button1 = QPushButton("BUTTON1")
layout.addWidget(button1)
button2 = QPushButton("BUTTON2")
layout.addWidget(button2)
hLayout = QHBoxLayout()
button3 = QPushButton("BUTTON3")
hLayout.addWidget(button3)
button4 = QPushButton("BUTTON4")
hLayout.addWidget(button4)
layout.addLayout(hLayout)
if __name__ == "__main__":
app = QApplication(sys.argv)
dlg = Dialog()
dlg.show()
sys.exit(app.exec_())
после запуска тестового кода, когда курсор мыши над QListView или QTreeView, эффект исчезает. Но над QTableView он продолжает работать.
Мне просто интересно, есть ли разница между QListView и QTableView.