Qlistwidget,而不是滚动
-
02-10-2019 - |
题
您如何改变一个行为 QListWidget
因此,它调整了高度,而不是选择(看似任意的)高度并添加滚动条?请参阅屏幕截图:
这 QListView
他们的水平应尽可能多地填充空间(如果可以的话,可以创建尽可能多的“列”。)然后,它们包裹并根据需要进行尽可能多的行以适合所有项目。这些计算应在调整窗口大小时调整。这一切都很好。
但是,我 想 发生的是,而不是高度保持不变,而是 QListView
应该垂直生长或收缩,不需要任何滚动条。如有必要,滚动将在父母身上处理 QWidget
该标签和列表托管。似乎一度是 QListWidget
已建立(不确定其默认设置的来源),它永远不会改变。在某些情况下,它太大(请参见上面的第二个“测试”列表),而在其他情况下太小(请参见上面的第一个“空白地图”列表。)
上面的布局并不令人惊讶:两个 QLabel
和两个 QListWidget
在 QVBoxLayout.
这是我在 QListWidget
':
setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));
(我已经尝试设置水平和垂直的滚动条策略,但这只是打开滚动条,剪裁内容。而不是我想要的。)
解决方案
也许您可以不使用QListWidget。 QT的示例包含一个新的布局类QFlowLayout,这可能很有用。使用以下类型的小部件层次结构,您可以获得带有标签的多个组,它们都将在一个QSCrollarea中。
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
上课并利用这些信息?我建议您在同一功能中重新计算小部件的大小,并在其中添加内容。虽然有些缺乏优雅,但这似乎是一个非常可靠的解决方案。