QAbstractTableModel#
The QAbstractTableModel
class provides an abstract model that can be subclassed to create table models. More…
Inherited by: QSqlQueryModel, QSqlTableModel, QSqlRelationalTableModel
Note
This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE
Detailed Description#
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#
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 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 callbeginInsertRows()
before inserting new rows into the data structure, and it must callendInsertRows()
immediately afterwards.An
insertColumns()
implementation must callbeginInsertColumns()
before inserting new columns into the data structure, and it must callendInsertColumns()
immediately afterwards.A
removeRows()
implementation must callbeginRemoveRows()
before the rows are removed from the data structure, and it must callendRemoveRows()
immediately afterwards.A
removeColumns()
implementation must callbeginRemoveColumns()
before the columns are removed from the data structure, and it must callendRemoveColumns()
immediately afterwards.
Note
Some general guidelines for subclassing models are available in the Model Subclassing Reference.
Thread safety#
Being a subclass of QObject, QAbstractTableModel
is not thread-safe
. Any QAbstractTableModel
model-related API should only be called from the thread the model object lives in. If the QAbstractTableModel
is connected with a view, that means the GUI thread, as that is where the view lives, and it will call into the model from the GUI thread. Using a background thread to populate or modify the contents of a model is possible, but requires care, as the background thread cannot call any model-related API directly. Instead, you should queue the updates and apply them in the main thread. This can be done with queued connections.
See also
- class PySide6.QtCore.QAbstractTableModel([parent=None])#
- Parameters:
parent –
PySide6.QtCore.QObject
Constructs an abstract table model for the given parent
.