2012-01-30 38 views
2

水平スクロールバーが不要になるようにQScrollAreaの幅を設定する方法はありますか?私は水平スクロールバーを非表示にすることができます。しかし、私はQScrollAreaをそれが必要でないほど大きくしたいと思っています。水平スクロールバーが不要になるようにQScrollbarの幅を設定する

私は現在、scrollbar.setFixedWidth()を使用してこれをやっています。 scrollbar.setSizetoContents()などのようなもので、より良い方法がありますか?

とにかく、レイアウト内のすべてのウィジェットの最大幅を取得する最も良い方法は何ですか?

答えて

1

私はついにそれを理解しました。最初scrollareaにウィジェットを追加する際のトリックは、私が以前にこの幅を設定した

def _restrictWidthToFit(self): 
    layout = self._scroll.widget().layout() 
    if layout.count() > 0: 
     fw = layout.itemAt(0).widget().sizeHint().width() 
     sw = self._scroll.verticalScrollBar().sizeHint().width() 
     w = fw + sw 
     return w 

:ここで私はscrollareaで私のサブウィジェットの1の幅を見つけるために使用していたハックコードがあります。しかし、この時点では、サイズはQtで完全には記入されていません。したがって、私は)showEventを(上書きすることにより幅を設定するために上記の方法を使用する:動作するように思われるので、この時点で

def showEvent(self, ev): 
    super(UIFilterCollection, self).showEvent(ev) 
    self._scroll.setFixedWidth(self._restrictWidthToFit()) 

幅が記入されています。

それは、彼らが私のシナリオでは何も変更していないようだ

2

QScrollArea.setWidgetResizableはあなたが望むことができるようです。しかし、それはおそらくスクロール領域に含まれるウィジェットの種類に依存します。

Size Hints and Layoutsのセクションも参照してください。

+0

setWidgetResizableにあるので、私のサブウィジェットのすべてがすでに同じ幅であることを注意することも価値があります。私はそれがスクロールエリアの基本的なウィジェットのためだと思います。 –

+0

@ durden2.0。スクロールエリアにはどのウィジェットがありますか?質問にサンプルコードを追加して、達成しようとしていることが示されている場合に役立ちます。 – ekhumoro

+0

申し訳ありませんが、複雑なレイアウトです。私は必需品にそれを沸かそうとするでしょう、私はスクロールエリアのQVBoxLayoutでまとめられたQlabelsの束を持っています。スクロール領域は、別のHBoxLayoutを持つQHboxLayoutの一部です。したがって、スクロール領域の幅は、デフォルトのHBoxLayoutのサイズの半分になります。私は最大QLabelの幅にデフォルトのスクロール領域の固定幅を設定したいと思います。したがって、水平スクロールバーは必要ありません。 –

関連する問題