通过单击 QML TableView 中的列标题进行排序[关闭]

Posted

技术标签:

【中文标题】通过单击 QML TableView 中的列标题进行排序[关闭]【英文标题】:Sort by Clicking on Column Headers in QML TableView [closed] 【发布时间】:2021-10-05 22:12:54 【问题描述】:

我正在尝试在 QML 中创建一个连接到模型的表,该模型允许通过单击列标题对 asc/desc 进行排序。我在 QML 中创建了一个 TableView,连接到 QSortFilterProxyModel,连接到 QAbstractTableModel,到目前为止一切顺利。但我不知道如何通过单击 QML 中的列标题来添加排序。

在 QSortFilterProxyModel 的文档中,它说为了对随附视图的内容进行排序,您必须使用 setSortingEnabled(布尔启用)。启用此属性似乎神奇地为列添加了单击排序功能...在 C++ 的 QTableView 中。

但是,我正在使用 QML。我怎样才能为我的 QML TableView 实现相同的目标?我考虑过将 QTableView 子类化并将其公开给 QML,但这对于可能已经以某种方式可用的东西来说似乎需要做很多工作。

【问题讨论】:

请提供minimal reproducible example 这是一个“如何做”的问题……所以没有 MRE。寻求有关如何解决问题的建议。 如有必要,因为这取决于例如您使用的 TableView(QQC1 或 QQC2) 我不知道该使用哪个 - 但根据您的回复,我发现与排序有关的差异。我认为如果 QQC2 取代 QQC1,我应该使用它(尽管 QQC1 会更容易) 【参考方案1】:

您可以使用 QtQuick.Controls v1 TableView 并在 SortIndicatorColumnChanged 和 SortIndicatorOrderChanged 信号处手动处理排序事件。

【讨论】:

我看到 TableView 已从 QtQuick.Controls v1 移动到 QtQuick v2.x 这是否意味着 v1 已被弃用,我应该使用 v2 tableview?如果是这样,SortIndicatorXX 属性发生了什么变化?我应该自己重新创建这个功能吗? QtQuick.Control v1 将在 Qt 6 中被弃用。ddgobkiprc33d.cloudfront.net/… 最困难的工作是创建几个(与标题相同的)鼠标区域,用于捕获每个标题项上的鼠标单击事件。但是您可以使用 tableview 源代码来创建具有自定义功能的新 tableview。

以上是关于通过单击 QML TableView 中的列标题进行排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过 C++ 单击按钮后更新 QML TableView

TableView在按钮上滚动单击Qml

具有动态列数的 QML TableView

单击列时在 Qml TableView Header 中查找单击事件

来自文件的 QML TableView

如何在 2 个 qml 窗口之间进行通信