2012-04-11 87 views
2

我試圖用我自己的級聯和tile定義重載QWorkspace類,但是當我嘗試使用.move函數時,它將相對於子窗口移動內部窗口小部件,而不是移動子窗口相對到工作區。使用QWorkspace級聯

這裏是我使用的代碼:

class MdiArea(QWorkspace): 
    def tile(self): 
     if len(self.windowList()) < 2: 
      return 

    def cascade(self): 

     if len(self.windowList()) < 2: 
      return 

     windows = [] 
     for window in self.windowList(): 
      windows.append((window.width(), window.height(), window)) 

      windows.sort() 
#   
      x = 0 
      y = 0 
      endX = self.width() - min(windows[-1][0], self.width()) 
      endY = self.height() - min(windows[-1][1], self.height()) 

     for i in range(len(windows)): 

      x = i * 10 
      y = i * 10 

      width, height, window = windows[i] 
      window.move(x, y) 

      window.raise_() 

下面是最終爲我工作的代碼(注意 '父()' 特別增加): 類MdiArea(QWorkspace): DEF瓦片(個體):如果len 打印self.width() (self.windowList())< 2: 返回 I = 0 用於self.windowList()窗口: X = I * window.parent ().width() y = 5 wind ow.parent()。移動(X,Y) window.parent()。raise_()
I = I + 1

def cascade(self): 
    if len(self.windowList()) < 2: 
     return 
    i=0 
    for window in self.windowList(): 
     x = i * 15 
     y = i * 30    
     window.parent().move(x, y) 
     window.parent().raise_()    
     i=i+1 

回答

1

每個窗口小部件被置於一個框架部件,其因此是內部該小部件的父控件。所以,你需要移動和提高window.parentWidget()

但類QWorkSpace已被廢棄,你應該使用QMdiArea代替(其subWindowList方法實際上返回窗口列表,而不是內部的窗口小部件列表)。

+0

這就是我所錯過的。我正在更新該程序,因此,撕掉所有QWorkspace代碼並放入QMdiArea將會太耗時。 – Stephen 2012-04-12 15:29:30