diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-01-29 16:41:59 +0100 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-01-29 16:52:58 +0100 |
commit | b684ba219493fb7b0108ae367d6d033aaa28053b (patch) | |
tree | f1fec8922da198e231416b50ef8f441ef6db065b /src/imports/labsmodels | |
parent | 97a5cf86345fd72cdff83c03664c19a8f5cdf79a (diff) | |
parent | 8354851b628ebae567a9125cbd0ba69268470c1b (diff) |
Merge remote-tracking branch 'origin/dev' into wip/cmake
Conflicts:
dependencies.yaml
Change-Id: Ie3e9dc62031a85e5e81cbdf04694b95159d49fca
Diffstat (limited to 'src/imports/labsmodels')
-rw-r--r-- | src/imports/labsmodels/qqmldelegatecomponent.cpp | 20 | ||||
-rw-r--r-- | src/imports/labsmodels/qqmltablemodel.cpp | 16 | ||||
-rw-r--r-- | src/imports/labsmodels/qqmltablemodel_p.h | 4 |
3 files changed, 23 insertions, 17 deletions
diff --git a/src/imports/labsmodels/qqmldelegatecomponent.cpp b/src/imports/labsmodels/qqmldelegatecomponent.cpp index b3c9afbb97..aaf3fea5da 100644 --- a/src/imports/labsmodels/qqmldelegatecomponent.cpp +++ b/src/imports/labsmodels/qqmldelegatecomponent.cpp @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE */ /*! - \qmlproperty string QtQml.Models::DelegateChoice::roleValue + \qmlproperty variant QtQml.Models::DelegateChoice::roleValue This property holds the value used to match the role data for the role provided by \l DelegateChooser::role. */ QVariant QQmlDelegateChoice::roleValue() const @@ -75,7 +75,7 @@ void QQmlDelegateChoice::setRoleValue(const QVariant &value) } /*! - \qmlproperty index QtQml.Models::DelegateChoice::row + \qmlproperty int QtQml.Models::DelegateChoice::row This property holds the value used to match the row value of model elements. With models that have only the index property (and thus only one column), this property should be intended as an index, and set to the desired index value. @@ -87,7 +87,7 @@ void QQmlDelegateChoice::setRoleValue(const QVariant &value) */ /*! - \qmlproperty index QtQml.Models::DelegateChoice::index + \qmlproperty int QtQml.Models::DelegateChoice::index This property holds the value used to match the index value of model elements. This is effectively an alias for \l row. @@ -109,7 +109,7 @@ void QQmlDelegateChoice::setRow(int r) } /*! - \qmlproperty index QtQml.Models::DelegateChoice::column + \qmlproperty int QtQml.Models::DelegateChoice::column This property holds the value used to match the column value of model elements. */ int QQmlDelegateChoice::column() const @@ -218,7 +218,7 @@ bool QQmlDelegateChoice::match(int row, int column, const QVariant &value) const /*! \qmlproperty string QtQml.Models::DelegateChooser::role - This property holds the role used to determine the delegate for a given model item. + This property holds the role or the property name used to determine the delegate for a given model item. \sa DelegateChoice */ @@ -289,9 +289,15 @@ QQmlComponent *QQmlDelegateChooser::delegate(QQmlAdaptorModel *adaptorModel, int v = value(adaptorModel, row, column, m_role); if (!v.isValid()) { // check if the row only has modelData, for example if the row is a QVariantMap v = value(adaptorModel, row, column, QStringLiteral("modelData")); - if (v.isValid()) - v = v.toMap().value(m_role); + + if (v.isValid()) { + if (v.canConvert(QMetaType::QVariantMap)) + v = v.toMap().value(m_role); + else if (v.canConvert(QMetaType::QObjectStar)) + v = v.value<QObject*>()->property(m_role.toUtf8()); + } } + // loop through choices, finding first one that fits for (int i = 0; i < m_choices.count(); ++i) { const QQmlDelegateChoice *choice = m_choices.at(i); diff --git a/src/imports/labsmodels/qqmltablemodel.cpp b/src/imports/labsmodels/qqmltablemodel.cpp index f190ad86b1..b6468d760f 100644 --- a/src/imports/labsmodels/qqmltablemodel.cpp +++ b/src/imports/labsmodels/qqmltablemodel.cpp @@ -271,7 +271,7 @@ QQmlTableModel::ColumnRoleMetadata QQmlTableModel::fetchColumnRoleData(const QSt if (columnRoleGetter.isString()) { // The role is set as a string, so we assume the row is a simple object. - if (firstRow.type() != QVariant::Map) { + if (firstRow.userType() != QMetaType::QVariantMap) { qmlWarning(this).quote() << "expected row for role " << roleNameKey << " of TableModelColumn at index " << columnIndex << " to be a simple object, but it's " @@ -284,7 +284,7 @@ QQmlTableModel::ColumnRoleMetadata QQmlTableModel::fetchColumnRoleData(const QSt roleData.isStringRole = true; roleData.name = rolePropertyName; - roleData.type = roleProperty.type(); + roleData.type = roleProperty.userType(); roleData.typeName = QString::fromLatin1(roleProperty.typeName()); } else if (columnRoleGetter.isCallable()) { // The role is provided via a function, which means the row is complex and @@ -296,7 +296,7 @@ QQmlTableModel::ColumnRoleMetadata QQmlTableModel::fetchColumnRoleData(const QSt // We don't know the property name since it's provided through the function. // roleData.name = ??? roleData.isStringRole = false; - roleData.type = cellData.type(); + roleData.type = cellData.userType(); roleData.typeName = QString::fromLatin1(cellData.typeName()); } else { // Invalid role. @@ -326,7 +326,7 @@ void QQmlTableModel::fetchColumnMetadata() for (const int builtInRoleKey : builtInRoleKeys) { const QString builtInRoleName = supportedRoleNames.value(builtInRoleKey); ColumnRoleMetadata roleData = fetchColumnRoleData(builtInRoleName, column, columnIndex); - if (roleData.type == QVariant::Invalid) { + if (roleData.type == QMetaType::UnknownType) { // This built-in role was not specified in this column. continue; } @@ -847,7 +847,7 @@ bool QQmlTableModel::setData(const QModelIndex &index, const QVariant &value, in // If the value set is not of the expected type, we can try to convert it automatically. const ColumnRoleMetadata roleData = columnMetadata.roles.value(roleName); QVariant effectiveValue = value; - if (value.type() != roleData.type) { + if (value.userType() != roleData.type) { if (!value.canConvert(int(roleData.type))) { qmlWarning(this).nospace() << "setData(): the value " << value << " set at row " << row << " column " << column << " with role " << roleName @@ -933,7 +933,7 @@ QQmlTableModel::ColumnRoleMetadata::ColumnRoleMetadata() } QQmlTableModel::ColumnRoleMetadata::ColumnRoleMetadata( - bool isStringRole, const QString &name, QVariant::Type type, const QString &typeName) : + bool isStringRole, const QString &name, int type, const QString &typeName) : isStringRole(isStringRole), name(name), type(type), @@ -995,7 +995,7 @@ bool QQmlTableModel::validateNewRow(const char *functionName, const QVariant &ro const QVariant rowAsVariant = operation == SetRowsOperation ? row : row.value<QJSValue>().toVariant(); - if (rowAsVariant.type() != QVariant::Map) { + if (rowAsVariant.userType() != QMetaType::QVariantMap) { qmlWarning(this) << functionName << ": row manipulation functions " << "do not support complex rows (row index: " << rowIndex << ")"; return false; @@ -1028,7 +1028,7 @@ bool QQmlTableModel::validateNewRow(const char *functionName, const QVariant &ro } const QVariant rolePropertyValue = rowAsMap.value(roleData.name); - if (rolePropertyValue.type() != roleData.type) { + if (rolePropertyValue.userType() != roleData.type) { qmlWarning(this).quote() << functionName << ": expected the property named " << roleData.name << " to be of type " << roleData.typeName << ", but got " << QString::fromLatin1(rolePropertyValue.typeName()) << " instead"; diff --git a/src/imports/labsmodels/qqmltablemodel_p.h b/src/imports/labsmodels/qqmltablemodel_p.h index 6bf3e6df19..d6e982d19a 100644 --- a/src/imports/labsmodels/qqmltablemodel_p.h +++ b/src/imports/labsmodels/qqmltablemodel_p.h @@ -116,14 +116,14 @@ private: { public: ColumnRoleMetadata(); - ColumnRoleMetadata(bool isStringRole, const QString &name, QVariant::Type type, const QString &typeName); + ColumnRoleMetadata(bool isStringRole, const QString &name, int type, const QString &typeName); bool isValid() const; // If this is false, it's a function role. bool isStringRole = false; QString name; - QVariant::Type type = QVariant::Invalid; + int type = QMetaType::UnknownType; QString typeName; }; |