7

QListWidget(一見任意の)高さを選択してスクロールバーを追加する代わりに、高さのサイズを変更するように、の動作をどのように変更しますか?スクリーンショットを参照してください:

スクリーンショット

'sは、QListView水平方向にできるだけ多くのスペースを埋める必要があります(必要に応じて、できるだけ多くの「列」を作成します)。次に、すべてのアイテムに合うように、必要な数の行をラップして作成します。これらの計算は、ウィンドウのサイズが変更されるときに調整する必要があります。これはすべて正常に機能しています。

ただし、私がやりたいのは、高さを同じに保つのではなく、QListView垂直方向に拡大または縮小し、スクロールバーを必要としないことです。スクロールは、必要に応じて、QWidgetすべてのラベルとリストをホストする親で処理されます。の高さQListWidgetが確立されると(デフォルトがどこから来ているのかわからない)、変更されることはないようです。大きすぎる場合(上記の2番目の「テスト」リストを参照)と小さすぎる場合(上記の最初の「空白のマップ」リストを参照)。

上記のレイアウトは驚くべきことではありません。2つQLabelの'と2つQListWidgetの'が'QVBoxLayout.に設定したプロパティはQListWidget次のとおりです。

setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));

(私はすでに水平および垂直スクロールバーポリシーを設定しようとしましたが、それはスクロールバーをオフにし、コンテンツをクリップします。私が望むものではありません。)

4

2 に答える 2

3

contentsSize()で呼び出される保護されたメンバー関数がありQListViewます。minimum()これは、必要な、、maximum()およびpageStep()スクロールバーの 計算に使用されます(ここで説明します)。

クラスをサブクラス化してQListView、その情報を利用できますか?コンテンツを追加するのと同じ関数でウィジェットのサイズを再計算することをお勧めします。エレガンスには多少欠けていますが、これはかなり信頼できるソリューションのようです。

于 2010-09-10T14:11:59.630 に答える
3

たぶん、QListWidgetを使用せずにこれを行うことができます。Qtの例には、便利な新しいレイアウトクラスQFlowLayoutが含まれています。次の種類のウィジェット階層を使用すると、ラベル付きの複数のグループを取得でき、それらはすべて1つのQScrollArea内にあります。

QScrollBox
  QVBoxLayout

    QLabel "Blank maps"
    QWidget
       QFlowLayout
          your own widgets showing map images and labels

    QLabel "Text"
    QWidget
       QFlowLayout
          your own widgets

問題は、この種のソリューションでは、QListWidgetベースのソリューションよりもはるかに多くのウィジェットが作成されることです。したがって、リストに数百のアイテムがある場合、これは最善の解決策ではない可能性があります。

于 2010-09-10T15:37:29.413 に答える