Что отличается между QListView и QTableView в paintEvent? - PullRequest
0 голосов
/ 08 мая 2018

Я протестировал настроенный 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.

...