如何在移动父窗口小部件时使子窗口小部件保持在同一屏幕位置?

时间:2014-12-02 10:23:50

标签: qt qt4 pyqt pyqt4

即使在移动父窗口小部件时,我正在尝试创建一个保持在同一屏幕位置的子窗口小部件。这应该会产生父小部件"观看"一个潜在的场景。以下代码说明了我想要的内容:

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_StaticContentsQEventFilter等尝试告诉Qt它不应该重绘子窗口小部件,但是没有成功。

0 个答案:

没有答案