2

QScrollArea水平スクロールバーが不要になるように幅を設定する方法はありますか?ポリシーを常にオフに設定することで、水平スクロールバーを非表示にできることを知っています。QScrollAreaでも、必要ないくらい大きくしたいです。

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

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

4

2 に答える 2

2

It looks like QScrollArea.setWidgetResizable could do what you want. But that will probably depend on what sort of widgets the scroll-area contains.

Also see the section on Size Hints and Layouts.

于 2012-01-30T18:41:34.653 に答える
1

私はついにそれを理解しました。これは、スクロールエリア内のサブウィジェットの 1 つの幅を調べるために使用していたハック コードです。

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

トリックは、最初にウィジェットをスクロールエリアに追加するときに、以前にこの幅を設定していたことです。ただし、この時点ではサイズが Qt によって完全に埋められていないようです。したがって、上記のメソッドを使用して、showEvent() をオーバーライドして幅を設定しました。

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

この時点で横幅が埋まっているので動きそうです。

また、サブウィジェットはすべて同じ幅であるため、すでに同じ幅になっていることにも注意してください。

于 2012-01-31T14:51:16.917 に答える