调整大小而不是滚动的QListWidget

Dav*_*eer 6 c++ qt qlistwidget qlistview

你如何改变它的行为,QListWidget以便它调整高度而不是选择(看似任意的)高度并添加滚动条?看截图:

屏幕截图

这些QListView应尽可能水平填充尽可能多的空间(如果你愿意,可以创建尽可能多的"列".)然后,它们会根据需要包装并生成尽可能多的行以适合所有项目.应调整窗口大小时调整这些计算.这一切都很好.

然而,我想要发生的是,不是高度保持不变,QListView应该垂直增长或缩小,永远不需要任何滚动条.如有必要,滚动将在QWidget托管所有标签和列表的父级上进行处理.似乎一旦确定了它的高度QListWidget(不确定它的默认值来自哪里),它就永远不会改变.在某些情况下它太大了(参见上面的第二个"测试"列表)而在其他情况下太小(参见上面的第一个"空白地图"列表.)

上面的布局也没有什么奇怪:二QLabel的两QListWidget的在QVBoxLayout.下面是我对设置属性QListWidget的:

setMovement(QListView::Static);
setResizeMode(QListView::Adjust);
setViewMode(QListView::IconMode);
setIconSize(QSize(128, 128));
Run Code Online (Sandbox Code Playgroud)

(我已经尝试设置水平和垂直滚动条策略,但这只是关闭滚动条,剪切内容.不是我想要的.)

小智 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
Run Code Online (Sandbox Code Playgroud)

问题是这种解决方案会比基于 QListWidget 的解决方案创建更多的小部件。因此,如果您的列表中有数百个项目,这可能不是最佳解决方案。