29 Q_PROPERTY(
int columnCount READ columnCount NOTIFY columnCountChanged FINAL)
30 Q_PROPERTY(QQmlListProperty<QQmlTableModelColumn> columns READ columns CONSTANT FINAL)
31 Q_INTERFACES(QQmlParserStatus)
32 Q_CLASSINFO(
"DefaultProperty",
"columns")
35 Q_DISABLE_COPY_MOVE(QQmlAbstractColumnModel)
37 explicit QQmlAbstractColumnModel(QObject *parent =
nullptr);
38 ~QQmlAbstractColumnModel() override =
default;
40 QQmlListProperty<QQmlTableModelColumn> columns();
42 static void columns_append(QQmlListProperty<QQmlTableModelColumn> *property, QQmlTableModelColumn *value);
43 static qsizetype columns_count(QQmlListProperty<QQmlTableModelColumn> *property);
44 static QQmlTableModelColumn *columns_at(QQmlListProperty<QQmlTableModelColumn> *property, qsizetype index);
45 static void columns_clear(QQmlListProperty<QQmlTableModelColumn> *property);
46 static void columns_replace(QQmlListProperty<QQmlTableModelColumn> *property, qsizetype index, QQmlTableModelColumn *value);
47 static void columns_removeLast(QQmlListProperty<QQmlTableModelColumn> *property);
49 Q_INVOKABLE QVariant data(
const QModelIndex &index,
const QString &role)
const;
50 Q_INVOKABLE QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole)
const override;
51 Q_INVOKABLE
bool setData(
const QModelIndex &index,
const QVariant &value,
const QString &role);
52 Q_INVOKABLE
bool setData(
const QModelIndex &index,
const QVariant &value,
int role = Qt::DisplayRole) override;
54 QHash<
int, QByteArray> roleNames()
const override;
55 Qt::ItemFlags flags(
const QModelIndex &index)
const override;
58 void columnCountChanged();
62 void classBegin() override;
63 void componentComplete() override;
65 virtual QVariant firstRow()
const = 0;
66 virtual void setInitialRows() = 0;
68 virtual QVariant dataPrivate(
const QModelIndex &index,
const QString &roleName)
const = 0;
69 virtual void setDataPrivate(
const QModelIndex &index,
const QString &roleName, QVariant value) = 0;
71 enum class ColumnRole : quint8
77 class ColumnRoleMetadata
81 ColumnRoleMetadata(ColumnRole role, QString name,
int type, QString typeName);
85 ColumnRole columnRole = ColumnRole::FunctionRole;
87 int type = QMetaType::UnknownType;
95 QHash<QString, ColumnRoleMetadata> roles;
98 ColumnRoleMetadata fetchColumnRoleData(
const QString &roleNameKey, QQmlTableModelColumn *tableModelColumn,
int columnIndex)
const;
99 void fetchColumnMetadata();
101 enum NewRowOperationFlag {
107 bool validateRowType(QLatin1StringView functionName,
const QVariant &row)
const;
108 virtual bool validateNewRow(QLatin1StringView functionName,
const QVariant &row,
109 NewRowOperationFlag operation = OtherOperation)
const;
111 QList<QQmlTableModelColumn *> mColumns;
113 bool mComponentCompleted =
false;
114 int mColumnCount = 0;
116 QVector<ColumnMetadata> mColumnMetadata;
119 QHash<
int, QByteArray> mRoleNames;