|  | Home · Overviews · Examples |

# QAbstractTableModel Class Reference
[com.trolltech.qt.gui module]

The `QAbstractTableModel` class provides an abstract model that can be subclassed to create table models. More...

Inherits `QAbstractItemModel`.

Inherited by `QSqlQueryModel`.

## Detailed Description

The `QAbstractTableModel` class provides an abstract model that can be subclassed to create table models.

`QAbstractTableModel` provides a standard interface for models that represent their data as a two-dimensional array of items. It is not used directly, but must be subclassed.

Since the model provides a more specialized interface than `QAbstractItemModel`, it is not suitable for use with tree views, although it can be used to provide data to a `QListView`. If you need to represent a simple list of items, and only need a model to contain a single column of data, subclassing the `QAbstractListModel` may be more appropriate.

The `rowCount` and `columnCount` functions return the dimensions of the table. To retrieve a model index corresponding to an item in the model, use `index` and provide only the row and column numbers.

### Subclassing

Note: Some general guidelines for subclassing models are available in the Model Subclassing Reference.

When subclassing `QAbstractTableModel`, you must implement `rowCount`, `columnCount`, and `data`. Default implementations of the `index` and `parent` functions are provided by `QAbstractTableModel`. Well behaved models will also implement `headerData`.

Editable models need to implement `setData`, and implement `flags` to return a value containing Qt::ItemIsEditable.

Models that provide interfaces to resizable data structures can provide implementations of `insertRows`, `removeRows`, `insertColumns`, and `removeColumns`. When implementing these functions, it is important to call the appropriate functions so that all connected views are aware of any changes:

- An `insertRows` implementation must call `beginInsertRows` before inserting new rows into the data structure, and it must call `endInsertRows` immediately afterwards.
- An `insertColumns` implementation must call `beginInsertColumns` before inserting new columns into the data structure, and it must call `endInsertColumns` immediately afterwards.
- A `removeRows` implementation must call `beginRemoveRows` before the rows are removed from the data structure, and it must call `endRemoveRows` immediately afterwards.
- A `removeColumns` implementation must call `beginRemoveColumns` before the columns are removed from the data structure, and it must call `endRemoveColumns` immediately afterwards.

See also Model Classes, Model Subclassing Reference, `QAbstractItemModel`, `QAbstractListModel`, and Pixelator Example.