スクロールの代わりにサイズを変更するqlistwidget
-
02-10-2019 - |
質問
aの動作をどのように変更しますか QListWidget
(一見任意の)高さを選択してスクロールバーを追加する代わりに、高さをサイズ変更するのですか?スクリーンショットを参照してください:
QListView
は、できるだけ多くのスペースを水平に満たす必要があります(そうであれば、多くの「列」を作成します)。その後、すべてのアイテムに適合するために必要な数の行を包み、作成します。これらの計算は、ウィンドウがサイズ変更されているときに調整する必要があります。これはすべて正常に機能しています。
しかし、何 欲しいです 起こることは、高さが同じままである代わりに、 QListView
垂直に成長または縮小する必要があり、スクロールバーは必要ありません。スクロールは、必要に応じて、親に処理されます QWidget
それはすべてのラベルとリストをホストします。一度の高さのようです QListWidget
確立されている(デフォルトがどこから来ているのかわからない)、それは決して変更されません。場合によっては大きすぎます(上記の2番目の「テスト」リストを参照)、他の場合は小さすぎます(上記の最初の「ブランクマップ」リストを参照してください。)
上記のレイアウトは驚くべきことではありません:2 QLabel
'sと2 QListWidget
's in QVBoxLayout.
これが私が設定したプロパティです QListWidget
's:
setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));
(私はすでに水平および垂直のスクロールバーのポリシーを設定しようとしましたが、それはただスクロールバーをオフにして、コンテンツを切り取っています。私が望むものではありません。)
解決
たぶん、あなたはqlistwidgetを使用せずにこれをできます。 QTの例には、新しいレイアウトクラスQflowlayoutが含まれています。次の種類のウィジェット階層を使用すると、ラベルを備えた複数のグループを取得でき、それらはすべて1つのQscrollea内にあります。
QScrollBox
QVBoxLayout
QLabel "Blank maps"
QWidget
QFlowLayout
your own widgets showing map images and labels
QLabel "Text"
QWidget
QFlowLayout
your own widgets
問題は、この種のソリューションがQListWidgetベースのソリューションよりもはるかに多くのウィジェットを作成することです。したがって、リストに何百ものアイテムがある場合、これが最良の解決策ではないかもしれません。
他のヒント
呼ばれる保護されたメンバー関数があります contentsSize()
の QListView
. 。必要なものを計算するために使用されます minimum()
, maximum()
, 、 と pageStep()
スクロールバーの場合(前述のとおり ここ).
サブクラス化できますか QListView
クラスとその情報を利用しますか?コンテンツを追加するのと同じ関数でウィジェットのサイズを再計算することをお勧めします。やや優雅さはありませんが、これはかなり信頼できるソリューションのようです。