如何将字典分配给QML属性?

时间:2017-03-15 15:46:40

标签: qt qml

我有一个用C ++编写的自定义QML对象,其中一个属性属于QVariantMap类型,因此它应该与Javascript对象兼容。

但是,我实际上分配了一个JS对象有一些麻烦:

Uploader {
    sample: selectSampleButton.fileUrl
    parameters: {
        x: '3'
        y: "String"
    }
}

这甚至可能是这样吗?我发现有一种可能性就是用Javascript分配它:

uploader.parameters = {x: "Test"};

2 个答案:

答案 0 :(得分:3)

您需要将其包装在括号中,否则将其解析为binding expression

Uploader {
    sample: selectSampleButton.fileUrl
    parameters: ({
        x: '3'
        y: "String"
    })
}

答案 1 :(得分:2)

如果您有一组固定的密钥,则可以创建"分组属性"例如fontanchors

分组属性的类型只是QObject派生类,具有相应的Q_PROPERTY声明,主类使用该实例,在您的情况下,类behin Uploader作为指向新类型的指针的Q_PROPERTY

大致喜欢这个

class UploaderParameters : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int x MEMBER m_x NOTIFY xChanged)
};

class Uploader : public QObject
{
    Q_PROPERTY(UploaderParameters* parameters MEMBER m_parameters CONSTANT)
};

在QML中

Uploader {
    parameters.x: 3
}

Uploader {
    parameters {
        x: 3
    }
}