在研究期间,Qt遇到了这样的问题。假设QWidget
上有QMainWindow
。如何确保在我QMainWindow
上调整QWidget
,QMainWindow
QWidget
时,请不要重新调整内容,直到调整大小没有停止。
是的,我看到了这个例子How to disable multiple auto-redrawing at resizing widgets in PyQt?
但是当我尝试这种方法时,它只是锁定了小部件内容。我只是想知道在调整MainWindow
大小时是否有可能确保Public c As Collection
Private Sub UserForm_Initialize()
Dim ctl As Control
Dim cls As clsCustomImage
Set c = New Collection
For Each ctl In Me.Controls
If TypeName(ctl) = "Image" Then
Set cls = New clsCustomImage
cls.init ctl
c.Add cls, CStr(c.Count)
End If
Next ctl
End Sub
的内容没有改变。请告诉我,这可能吗?
非常感谢。
答案 0 :(得分:1)
我仍在猜测你想要什么,但听起来好像你基本上想要两种模式用于你的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_())
请注意,它只是对您链接的答案中代码的简单修改。