即使在移动父窗口小部件时,我正在尝试创建一个保持在同一屏幕位置的子窗口小部件。这应该会产生父小部件"观看"一个潜在的场景。以下代码说明了我想要的内容:
from PyQt4.QtGui import QApplication, QWidget, QPalette, QPainter
from PyQt4.QtCore import Qt
class Child(QWidget):
def __init__(self, parent=None):
super(Child, self).__init__(parent)
pal = QPalette(Qt.white)
self.setAutoFillBackground(True)
self.setPalette(pal)
def paintEvent(self, event):
painter = QPainter(self)
painter.fillRect(25, 25, 50, 50, Qt.red)
painter.end()
class Parent(QWidget):
def __init__(self, parent=None):
super(Parent, self).__init__(parent)
self.child = Child(self)
self.child.setGeometry(100, 100, 100, 100)
def moveEvent(self, event):
diffPos = event.pos() - event.oldPos()
self.child.move(self.child.pos() - diffPos)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
parent = Parent()
parent.setGeometry(100, 100, 300, 300)
parent.show()
sys.exit(app.exec_())
然而,它闪烁!我认为这是因为我最终画了两次。由于子窗口小部件保持在相同位置,因此实际上不需要重绘。我已尝试使用WA_StaticContents
,QEventFilter
等尝试告诉Qt它不应该重绘子窗口小部件,但是没有成功。