Qt5 QListView 在水平行而不是垂直列表中设置项目

Qt5 QListView set up items in a horizontal row instead of vertical list

我正在设置一个带有自定义 QStyledItemDelegateQListView,我希望呈现我的项目,以便它们处于水平 'row'。

假设我们的 QListView 具有 "A"、"B" 和 "C" 的模型,标准视图会将它们显示为:

----------------------------------------------------------------------------------
|X[ A                                                                          ]X|
| [ B                                                                          ] |
| [ C                                                                          ] |
----------------------------------------------------------------------------------

每个项目占据整个宽度。我想要做的是 A BC 处于水平方向,即使模型中的每一个都在单独的行中(并且整个视图中只有一列)。

X[ A ]X [ B ] [ C ]

(X == 所选项目背景)

我不能使用 QTableView 的原因是因为我会增加和减少项目的大小,因此当它们太宽无法放在一行时需要换行;不断更改 table 中的列、行和单元格大小似乎比此工作所需的工作更多,而且我不希望视图中有 table 边框。

到目前为止,我已经尝试覆盖 sizeHintpaint 方法。我认为我不需要编辑器方法,因为这些项目不会进入编辑模式。

任何基本示例对我来说都足够了。如果你用 PyQt5 写下你的答案并且它帮助我找到我的答案,我会把它标记为正确答案,即使我使用的是 C++。

您可以使用 setFlow 将流量 属性 从 "TopToBottom" 更改为 "LeftToRight",如下所示:

listView->setFlow(QListView::Flow::LeftToRight);