Skip to content
AtlasOSFramework API
Browse the docs

DataTable

A sortable table in the Section style that only makes the rows on screen.

DataTable is a card with 6 px corners with a header that sorts and inset rows below it. It scrolls its own rows and makes only the ones on screen, so a list of a thousand processes costs what twenty do. It supports resizable and hideable columns, multi-selection, row context menus and a flattened tree. For a simple list of rows use AtlasListView.

DataTable is a FocusScope, one Tab stop. Name it for screen readers with Accessible.name.

The table doesn't sort: a header click sets sortRole and sortOrder, and the model follows them (a Rust QAbstractItemModel that moves rows, not one that resets).

Example

DataTable {
    model: apps
    columns: [
        { title: qsTr("Name"), role: "name", fill: true, iconRole: "icon" },
        { title: qsTr("CPU"), role: "cpu", width: 5, align: Qt.AlignRight,
          heat: 100, text: v => v.toFixed(1) + "%" },
    ]
    onActivated: row => open(row)
    onContextMenuRequested: (row, x, y) => menu.popup()
    Accessible.name: qsTr("Apps")
}

Properties

Name Type Default Description
cellPadding real (read-only) — The horizontal padding inside a cell.
collapsedText string (read-only) — The accessible description of a collapsed tree row (translated).
columnWidths QList<real> [] Every column's width in pixels once the user has resized; empty means automatic. Writable: save it from columnResized and restore it on start. The fill column's entry is informational only.
columns var [] The columns, as a list of objects (see Columns below).
columnsMenu bool false True opens a menu of checkable column titles on a right click of the header (and emits headerMenuRequested).
count int (read-only) — The number of rows.
currentIndex int -1 The current row.
density int AtlasStyle.density AtlasStyle.Normal or AtlasStyle.Compact; Compact makes the rows about 75% as tall.
depthRole string "" For a tree the model has flattened: the role holding a row's depth; the first column indents by it.
expandableRole string "" The role that says whether a row can be expanded; the first column then shows a chevron that emits toggleRequested.
expandedRole string "" The role that says whether an expandable row is open.
expandedText string (read-only) — The accessible description of an expanded tree row (translated).
hiddenColumns QList<int> [] The indexes of the hidden columns; writable. At least one column always stays visible.
mirrored bool (read-only) — True when the layout is mirrored (right-to-left); the table mirrors every cell and the header with it.
model var undefined The rows: any list model.
padding real (read-only) — The padding around the header and rows inside the card.
placeholderText string "" Shown in the middle when there are no rows ("No Apps Match").
pointerInside bool (read-only) — True while the pointer is over the rows. A live model should hold its order still then, so the row under the pointer stays put; hold it while a context menu opened on a row is up, too.
resizableColumns bool false True lets the user drag the boundary between two columns; a double click fits the column to its widest visible cell.
rowHeight real (read-only) — The height of a row, from density.
selectedRows QList<int> (read-only) — The selected row numbers, ascending. Selection is by row number: a live model that moves rows leaves it where it was, and a change of model clears it.
selectionMode int DataTable.SingleSelection How rows are selected (DataTable.SelectionMode).
sortOrder int Qt.DescendingOrder The sort direction the model should follow; a click on the sorted header flips it.
sortRole string "" The model role the table is sorted by; a header click sets it.
widths var (read-only) — The pixel width of each column (0 for a hidden one); the fill column takes what the others leave.

Signals

Name Description
activated(int row) Emitted when a row is activated with Return, Enter or a double click.
columnResized(int column, real width) Emitted when the user resizes a column, also while dragging; width is in pixels.
contextMenuRequested(int row, real x, real y) Emitted on a right click on a row, the Menu key or Shift+F10; x and y are in the table.
deleteRequested(int row) Emitted when Delete is pressed on the current row.
headerMenuRequested(real x, real y) Emitted on a right click on the header, at x, y in the table, for a menu of the columns to show.
rowContextMenuRequested(int row, QPointF pos) The same request as contextMenuRequested, with the position as a point. A right click selects the row first, unless it is already part of a selection.
toggleRequested(int row) Emitted when the chevron of a tree row is clicked, or Left or Right is pressed to fold or unfold it; the app flattens the tree.

Methods

Signature Description
clearSelection(): var Clears the selection.
openMenuAtCurrent(): var Opens the row context menu on the current row (as the Menu key does) and returns whether there was a row.
selectAll(): var Selects every row (MultiSelection only).
selectRows(var rows): var Selects the given row numbers (MultiSelection); in SingleSelection the first one becomes current.
sortBy(var i): var Sorts by column i as a header click does: flips the direction on the sorted column, else sorts by it (figures biggest first, names A to Z). Does nothing for a column with sortable: false.

Enums

SelectionMode

Value Description
DataTable.SingleSelection The current row is the selection.
DataTable.MultiSelection Ctrl click toggles, Shift click and Shift+arrows extend, Ctrl+A selects all, Space toggles the current row.
DataTable.NoSelection No selection.

Columns

A column is an object with these keys:

Key Meaning
title, role The header text and the model role the column shows.
width Width in grid units. Or fill: true for the column that takes what is left (the first one, if none says so; a second fill is sized by its width).
align Qt.AlignLeft (default) or Qt.AlignRight for figures.
text(value, row) Formats the value; row is the delegate's model object.
heat A short bar under the cell's text, as wide as value / heat of the cell (load columns); 0 or absent for none.
iconRole A role holding an icon name, drawn before the text.
cell A Component for anything else (a status dot, a switch); it gets value, row and column.
sortable false keeps the header from sorting (default true).

Note

Rows are reused as the list scrolls, so a cell shows only what value, row and column say and keeps no state of its own.

Keyboard

Up, Down, Page Up, Page Down, Home and End move the current row. Return or Enter activates it, Delete emits deleteRequested, Menu or Shift+F10 opens the row menu. In multi selection Shift+arrows extend, Ctrl+A selects all and Space toggles the current row. On a tree row, Right unfolds and Left folds (swapped when mirrored).