Qt Weekly #6: Sorting and filtering a TableView

The QtQuick Controls TableView offers a variety of ways to provide data. Supported data model types include the traditional QAbstractItemModel derivative models, QObjectList, JS arrays, and even plain numbers. This flexibility imposes an unfortunate limitation that TableView doesn’t know how to sort arbitrary data models. TableView merely offers a visual enabler, a sort indicator, and the actual sorting is left to the application. In this blog post, we’ll present an example of sorting and filtering a TableView.

The example is based on a QSortFilterProxyModel derivative model. The source model can be any QAbstractItemModel subclass, but the proxy model has been specifically tweaked to be used with QML data models such as ListModel and XmlListModel. The example uses an XmlListModel that loads images from Flickr.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

TableView

id:tableView

sortIndicatorVisible:true

model:SortFilterProxyModel

id:proxyModel

source:sourceModel.count&gt;0?sourceModel:null

sortOrder:tableView.sortIndicatorOrder

sortCaseSensitivity:Qt.CaseInsensitive

sortRole:sourceModel.count&gt;0?

tableView.getColumn(tableView.sortIndicatorColumn).role:""

filterString:"*"+searchBox.text+"*"

filterSyntax:SortFilterProxyModel.Wildcard

filterCaseSensitivity:Qt.CaseInsensitive

}

The above code snippet presents the most relevant parts of the attached example. In order to enable sorting and filtering, it makes the sort indicator visible and sets up property bindings to the appropriate UI elements, and SortFilterProxyModel handles the rest.

Disclaimer: SDKNews.com only syndicates the blog entries from various SDK blogs.
We are not the creator/author of these entries (posts). Product names, brand names
and company names mentioned on this site may be trademarks of their respective owners.