您如何改变一个行为 QListWidget 因此,它调整了高度,而不是选择(看似任意的)高度并添加滚动条?请参阅屏幕截图:

screen shot

QListView他们的水平应尽可能多地填充空间(如果可以的话,可以创建尽可能多的“列”。)然后,它们包裹并根据需要进行尽可能多的行以适合所有项目。这些计算应在调整窗口大小时调整。这一切都很好。

但是,我 发生的是,而不是高度保持不变,而是 QListView 应该垂直生长或收缩,不需要任何滚动条。如有必要,滚动将在父母身上处理 QWidget 该标签和列表托管。似乎一度是 QListWidget 已建立(不确定其默认设置的来源),它永远不会改变。在某些情况下,它太大(请参见上面的第二个“测试”列表),而在其他情况下太小(请参见上面的第一个“空白地图”列表。)

上面的布局并不令人惊讶:两个 QLabel和两个 QListWidgetQVBoxLayout. 这是我在 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 上课并利用这些信息?我建议您在同一功能中重新计算小部件的大小,并在其中添加内容。虽然有些缺乏优雅,但这似乎是一个非常可靠的解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top