如何更改QListWidget
的行为以使其调整高度而不是选择(看似任意的)高度并添加滚动条?见截图:
QListView
应尽可能水平填充尽可能多的空间(如果愿意,可以创建尽可能多的“列”。)然后,它们会根据需要包装并生成尽可能多的行以适合所有项目。应调整窗口大小时调整这些计算。这一切都很好。
然而,我想要发生的事情是,QListView
不应保持相同的高度,而应垂直增长或缩小,永远不需要任何滚动条。如有必要,滚动将在托管所有标签和列表的父QWidget
上处理。似乎一旦QListWidget
的高度建立(不确定其默认值来自何处),它就永远不会改变。在某些情况下它太大了(参见上面的第二个“测试”列表)而在其他情况下太小(参见上面的第一个“空白地图”列表。)
上面的布局并不奇怪:QLabel
中的两个QListWidget
和两个QVBoxLayout.
以下是我在QListWidget
上设置的属性:
setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));
(我已经尝试设置水平和垂直滚动条策略,但这只是关闭滚动条,剪切内容。不是我想要的。)
答案 0 :(得分:3)
contentsSize()
中有一个名为QListView
的受保护成员函数。它用于计算滚动条所需的minimum()
,maximum()
和pageStep()
(如上所述here)。
您可以继承QListView
类并使用该信息吗?我建议您在向其添加内容的同一函数中重新计算窗口小部件的大小。虽然有点缺乏优雅,但这似乎是一个非常可靠的解决方案。
答案 1 :(得分:3)
也许你可以不使用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的解决方案创建更多的小部件。因此,如果您的列表中有数百个项目,这可能不是最佳解决方案。