2

独自のカスケードとタイル定義でQWorkspaceクラスをオーバーロードしようとしていますが、.move関数を使用しようとすると、ワークスペースに対してサブウィンドウを移動するのではなく、サブウィンドウに対して内部ウィジェットを移動します。

これが私が使用しているコードです:

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

これが最終的に私のために働いたコードです(特に'parent()'の追加に注意してください):class MdiArea(QWorkspace):def tile(self):print self.width()if len(self.windowList())< 2:self.windowList()のウィンドウに対してi = 0を返します:x = i * window.parent()。width()y = 5 window.parent()。move(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
4

1 に答える 1

1

各ウィンドウ ウィジェットはフレーム ウィジェット内に配置され、フレーム ウィジェットはそのウィジェットの親ウィジェットになります。だからあなたは移動して上げる必要がありますwindow.parentWidget()

しかし、クラスQWorkSpaceは非推奨であり、代わりに使用する必要がありますQMdiArea(そのsubWindowListメソッドは実際には内部ウィジェット リストではなくウィンドウ リストを返します)。

于 2012-04-11T23:40:16.137 に答える