Skip to content

DataClassModel

Qt Base Class: QAbstractTableModel

Signature: QAbstractTableModel(self, parent: Optional[PySide6.QtCore.QObject] = None) -> None

Base classes

Name Children Inherits
BaseDataclassModel
prettyqt.itemmodels.basedataclassmodel

⋔ Inheritance diagram

graph TD
  1473245452832["itemmodels.DataClassModel"]
  1473245454784["itemmodels.BaseDataclassModel"]
  1473299901888["core.AbstractTableModel"]
  1473299900912["core.AbstractTableModelMixin"]
  1473299890176["core.AbstractItemModelMixin"]
  1473299815024["core.ObjectMixin"]
  140713234304496["builtins.object"]
  1473289054032["QtCore.QAbstractTableModel"]
  1473289050128["QtCore.QAbstractItemModel"]
  1473288842240["QtCore.QObject"]
  1473291690208["Shiboken.Object"]
  1473245454784 --> 1473245452832
  1473299901888 --> 1473245454784
  1473299900912 --> 1473299901888
  1473299890176 --> 1473299900912
  1473299815024 --> 1473299890176
  140713234304496 --> 1473299815024
  1473289054032 --> 1473299901888
  1473289050128 --> 1473289054032
  1473288842240 --> 1473289050128
  1473291690208 --> 1473288842240
  140713234304496 --> 1473291690208

🛈 DocStrings

Bases: BaseDataclassModel

Table model to display a list of dataclasses.

Source code in prettyqt\itemmodels\dataclassmodel.py
class DataClassModel(itemmodels.BaseDataclassModel):
    """Table model to display a list of dataclasses."""

    SUPPORTS = Sequence[datatypes.IsDataclass]

    def __init__(self, items: Sequence[datatypes.IsDataclass], **kwargs):
        super().__init__(items, **kwargs)

    @classmethod
    def supports(cls, instance) -> bool:
        match instance:
            case (datatypes.IsDataclass(), *_):
                return True
            case _:
                return False

    def get_fields(self) -> dict[str, Any]:
        fields = dataclasses.fields(self.Class)
        return {field.name: field for field in fields}

    def flags(self, parent: core.ModelIndex) -> constants.ItemFlag:
        if not parent.isValid():
            return super().flags(parent)
        if self.Class.__dataclass_params__.frozen:
            super().flags(parent)
        field_name = self._field_names[parent.column()]
        instance = self.items[parent.row()]
        # need to cover not parent.isValid()?
        val = getattr(instance, field_name)
        if isinstance(val, bool):
            return super().flags(parent) | constants.IS_CHECKABLE
        else:
            return super().flags(parent) | constants.IS_EDITABLE

Info

Recommended delegate: 'editor'

Info

Supported data type: collections.abc.Sequence[prettyqt.utils.datatypes.IsDataclass]

⌗ Property table

Qt Property Type Doc
objectName QString