2017-06-21 50 views
0

在研究過程中,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

因此,當小部件調整大小時,您期望在小部件中看到什麼? –

回答

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_()) 

注意,它本質上是在您鏈接到答案的代碼只是一個簡單的修改。

+0

謝謝。我會嘗試與它=) –

相關問題