I just ran into this issue myself, and I have a solution. I know this is an old topic, but since this was pretty much the only thing I could find on the internet about this problem, hopefully this can help someone else.
In order to bind to a property of the nested QtObject props from the of component A, props needs to be a type of component that is known within the scope where it's properties are being accessed.
To fix the code above, create a new file for the props Component:
//Props.qml
import QtQml 2.0
QtObject {
property color mainColor
}
Now update the A component to use the Props component:
//A.qml
import QtQuick 2.0
import QtQml 2.0
Rectangle {
property Props props: Props {
mainColor: "blue"
}
color: props.mainColor
}
A few things to note here from my testing:
If you were to now add a new property to the instance of Props in A.qml above, and try to bind a value to that , it would fail, because in the outside scope, that new property is not a known property of the Props type.
Similarly, if you were to declare A.props as property QtObject props: Props { ... } then binding to mainColor would fail because mainColor is not a property of QtObject, and props is being exposed as a QtObject (the base class).
It appears that the property resolution for binding to a nested property is not able to infer additional properties added to an instance of an object, and can only be bound to known properties of the type being exposed.