如何创建分组/嵌套属性?

Mat*_*ost 6 qt qml qt-quick qt5 qtquick2

我试图做'font.family'或'anchors.fill'等嵌套属性,但我不能以正常方式初始化它们,因为它打印'无法分配给不存在的属性'.相反,我被迫使用Component.onCompleted方法.怎么了?

MyButtonStyling.qml:

import QtQml 2.1

QtObject
{
    property QtObject background: QtObject
    {
        property color pressed: "#CCCCCC"
        property color enabled: "#666666"
        property color disabled: "#555555"
    }
}
Run Code Online (Sandbox Code Playgroud)

main.qml:

import QtQuick 2.0

Item
{
    width: 400
    height: 300
    MyButton
    {
        text: "TEST"
        styling: MyButtonStyling
        {
            //background.enabled: "#1B2E0A" //Cannot assign to non-existent property "enabled"
            Component.onCompleted:
            {
                background.enabled = "#1B2E0A" //Works
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MyButton.qml:

import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0

Button
{
    property QtObject styling: MyButtonStyling {}

    implicitWidth: 80
    implicitHeight: 80

    style: ButtonStyle
    {
        background: Item
        {
            Rectangle
            {
                anchors.fill: parent
                color: control.pressed ? styling.background.pressed : control.enabled ? styling.background.enabled : styling.background.disabled
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

vpi*_*ver 12

尝试用QtObjectQML文件替换嵌套.例如,我用它替换了它BackgroundTheme.qml.这样,属性(可以正确地称为"分组属性")在绑定中正常工作,没有任何错误.

BackgroundTheme.qml

import QtQuick 2.0

QtObject {
  property color pressed: "#CCCCCC"
  property color enabled: "#666666"
  property color disabled: "#555555"
}
Run Code Online (Sandbox Code Playgroud)

MyButtonStyling.qml

import QtQuick 2.0

QtObject {       
    property BackgroundTheme background: BackgroundTheme {}
}
Run Code Online (Sandbox Code Playgroud)