7

多くのQDockWidgetsがあり、中央のウィジェットがないアプリがあります。これらのQDockWidgetsの初期サイズ (アプリケーションの開始時のサイズ) のいくつかを設定したいのですが、それらの最小/最大サイズを制限したくありません。

どうやってするの?たとえば、初期サイズ 150x75 をそのうちの 1 つに設定する必要があります。明らかな方法 (ドック ウィジェットのコンテンツに関連するQWidget.Resize()など) を試しましたが、まったく機能しませんでした。

状況の単純化されたモデルを次に示します。

from PyQt4 import QtCore, QtGui

app = QtGui.QApplication([''])

mw = QtGui.QMainWindow() # mw = MainWindow
mw.setCentralWidget(None)
mw.showMaximized()

mw.dockWdg1 = QtGui.QDockWidget(mw)
mw.content1 = QtGui.QTreeWidget()
mw.dockWdg1.setWidget(mw.content1)
mw.addDockWidget(QtCore.Qt.DockWidgetArea(2), mw.dockWdg1)
mw.dockWdg1.setWindowTitle("1st dock widget")

mw.dockWdg2 = QtGui.QDockWidget(mw)
mw.content2 = QtGui.QTreeWidget()
mw.dockWdg2.setWidget(mw.content2)
mw.addDockWidget(QtCore.Qt.DockWidgetArea(1), mw.dockWdg2)
mw.dockWdg2.setWindowTitle("2nd dock widget")

mw.dockWdg3 = QtGui.QDockWidget(mw)
mw.content3 = QtGui.QTreeWidget()
mw.dockWdg3.setWidget(mw.content3)
mw.addDockWidget(QtCore.Qt.DockWidgetArea(1), mw.dockWdg3)
mw.dockWdg3.setWindowTitle("3rd dock widget")

mw.show()
app.exec_()
4

3 に答える 3

11

ドックウィジェットはメイン ウィンドウのレイアウトに組み込まれるため、サイズを変更しようとしても無視されます。

これに対する標準的な回避策は、コンテンツ ウィジェットのサブクラスを作成し、その を再実装することsizeHintです。

class TreeWidget(QtGui.QTreeWidget):
    def sizeHint(self):
        return QtCore.QSize(150, 75)

mw.dockWdg2 = QtGui.QDockWidget(mw)
mw.content2 = TreeWidget()
mw.dockWdg2.setWidget(mw.content2)

ただし、これは、他のドックウィジェットのサイズも慎重に管理している場合にのみ機能します。もちろん、メイン ウィンドウを最大化することも、最終的な結果に影響を与えます。

また、 QMainWindow.saveStateQMainWindow.restoreStateを使用してドックウィジェットの初期状態を管理することも検討してください。

于 2012-12-05T03:35:47.933 に答える
1

setFixedWidth/setFixedHeight として、fixedSize 関数を使用します。

于 2013-05-06T20:38:50.393 に答える