Qt5 QListView 在水平行而不是垂直列表中设置项目
Qt5 QListView set up items in a horizontal row instead of vertical list
我正在设置一个带有自定义 QStyledItemDelegate
的 QListView
,我希望呈现我的项目,以便它们处于水平 'row'。
假设我们的 QListView
具有 "A"、"B" 和 "C" 的模型,标准视图会将它们显示为:
----------------------------------------------------------------------------------
|X[ A ]X|
| [ B ] |
| [ C ] |
----------------------------------------------------------------------------------
每个项目占据整个宽度。我想要做的是 A
B
和 C
处于水平方向,即使模型中的每一个都在单独的行中(并且整个视图中只有一列)。
X[ A ]X [ B ] [ C ]
(X
== 所选项目背景)
我不能使用 QTableView
的原因是因为我会增加和减少项目的大小,因此当它们太宽无法放在一行时需要换行;不断更改 table 中的列、行和单元格大小似乎比此工作所需的工作更多,而且我不希望视图中有 table 边框。
到目前为止,我已经尝试覆盖 sizeHint
和 paint
方法。我认为我不需要编辑器方法,因为这些项目不会进入编辑模式。
任何基本示例对我来说都足够了。如果你用 PyQt5 写下你的答案并且它帮助我找到我的答案,我会把它标记为正确答案,即使我使用的是 C++。
您可以使用 setFlow 将流量 属性 从 "TopToBottom" 更改为 "LeftToRight",如下所示:
listView->setFlow(QListView::Flow::LeftToRight);
我正在设置一个带有自定义 QStyledItemDelegate
的 QListView
,我希望呈现我的项目,以便它们处于水平 'row'。
假设我们的 QListView
具有 "A"、"B" 和 "C" 的模型,标准视图会将它们显示为:
----------------------------------------------------------------------------------
|X[ A ]X|
| [ B ] |
| [ C ] |
----------------------------------------------------------------------------------
每个项目占据整个宽度。我想要做的是 A
B
和 C
处于水平方向,即使模型中的每一个都在单独的行中(并且整个视图中只有一列)。
X[ A ]X [ B ] [ C ]
(X
== 所选项目背景)
我不能使用 QTableView
的原因是因为我会增加和减少项目的大小,因此当它们太宽无法放在一行时需要换行;不断更改 table 中的列、行和单元格大小似乎比此工作所需的工作更多,而且我不希望视图中有 table 边框。
到目前为止,我已经尝试覆盖 sizeHint
和 paint
方法。我认为我不需要编辑器方法,因为这些项目不会进入编辑模式。
任何基本示例对我来说都足够了。如果你用 PyQt5 写下你的答案并且它帮助我找到我的答案,我会把它标记为正确答案,即使我使用的是 C++。
您可以使用 setFlow 将流量 属性 从 "TopToBottom" 更改为 "LeftToRight",如下所示:
listView->setFlow(QListView::Flow::LeftToRight);