如何在没有中间漆的情况下调整QWidget的大小

问题描述:

在研究过程中,Qt遇到了这样的问题。假设我在QMainWindow上有QWidget。我如何确保当我调整QMainWindowQWidget这个QMainWindow时,不要重新调整内容,直到调整大小不停止。如何在没有中间漆的情况下调整QWidget的大小

是啊,我看到这个例子How to disable multiple auto-redrawing at resizing widgets in PyQt?

但是当这个方法我试过它只是锁定Widget内容。我只是想知道在调整MainWindow的大小时是否可以确保QWidget的内容没有变化。请告诉我,这可能吗?

非常感谢。

+0

如果您链接的答案不是您要查找的内容,那么您需要更详细地解释您想要的内容。 –

+0

那么在从链接做例子的时候,有如下的状况。当我们开始调整大小时,QWidget中的内容就会隐藏,当我们停止调整主窗口的大小时,它会取消隐藏。所以,当我们调整QMainWindow的大小时,QWidget的内容是不可见的,这是不好的。我只想知道,可能有一种方法可以确保内容不会在调整大小和重新绘制时发生变化,因为当我们完成调整大小时 –

+0

因此,当小部件调整大小时,您期望在小部件中看到什么? –

我仍然对你想要的东西有轻微的猜测,但听起来好像你基本上想为paintEvent方法需要两种模式 - 正常的方法是在大部分时间内处理部件,轻量级,可以在窗口小部件调整大小时使用的模式。

如果是这样的话,那么你可以尝试像下面...

#!/usr/bin/python3 
import sys 
from PyQt5.QtCore import * 
from PyQt5.QtWidgets import * 

class widget(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.resize_timer = QTimer(self) 
     self.resize_timer.setSingleShot(True) 
     self.resize_timer.setInterval(100) 
     self.resize_timer.timeout.connect(self.delayed_update) 

    def delayed_update(self): 
     self.update() 

    def paintEvent(self, event): 
     if self.resize_timer.isActive(): 
      print("painting deferred") 

      # Your `lightweight' rendering goes here and will be used 
      # while the widget is being resized. 
     else: 
      print("painting now") 

      # Full rendering code goes here. 

    def resizeEvent(self, event): 
     super(widget, self).resizeEvent(event) 
     self.resize_timer.start() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    f = widget() 
    f.show() 
    sys.exit(app.exec_()) 

注意,它本质上是在您链接到答案的代码只是一个简单的修改。

+0

谢谢。我会尝试与它=) –