On 14/07/2010, at 10:42 AM, ext Jason H wrote:
> But the ability to define and apply arbitrary property groups - be they be 
> for 
> themes or something else - has a good bit of support and application. Can we 
> get 
> the feature? Please? 

>From my perspective, the main requirement is "make it easy for designers to 
>change the visual aspects of a large QML project". The below approaches help 
>to achieve that, and are available for use right now. For future releases (the 
>feature set of 4.7 is essentially frozen), we should certainly look at how 
>well this approach has served, and how we can better meet this goal. Something 
>like PropertyGroups should be part of the research (we'll need to answer 
>questions like how it fits in with states, or bindings (we often have things 
>like color: focus ? "green" : "red"; how would that work?), what the 
>performance implications are, and how much improvement it gives us for the 
>costs). If you'd like to help, trying the techniques below in your project for 
>a couple months, and providing feedback on what worked and what didn't as 
>opposed to another system like CSS that you are familiar with, would be 
>invaluable.

Current Approach 1
------------------
If you've got a single, unique set of properties to apply, Alan's first 
suggestion of custom components works really well.

//BigText.qml
Text {
    font.family: "Arial"
    font.pointSize: 30
    color: "red"
}

//everywhere else    
BigText { test: "Hello" }

In my mind, this is essentially identical (at least in expressiveness) to:

Text {
    text:"Hello"
    properties: [bigText]
}
(i.e. when one PropertyGroup is applied.) One difference is that the BigText 
approach would lead to a directory full of these small files, while the 
PropertyGroup approach would lead to a file full of small snippets. In both 
cases the potential navigation problems (lots of files or really large file) 
should be solvable by good tooling.

Current Approach 2
------------------
Alan's second suggestion regarded a master theme file:

//the theme definition
QtObject {
    id: bigText
    property string family: "Arial"
    property real pointSize: 30
    property color color: "red"
}

QtObject {
    id: anotherSetOfProperties
    property color color: "purple"
}

//everywhere else
Text {
    text: "Hello"
    font.family: bigText.family
    font.pointSize: bigText.fontSize
    color: bigText.color
    styleColor: anotherSetOfProperties.color
}

Like the PropertyGroup approach below, this allows applying global properties 
that are defined in a single file.

Text {
    text:"Hello"
    properties: [bigText, anotherSetOfProperties]
}

Unlike the PropertyGroup approach, it is "fixed" what properties from what 
groups apply. This has both pros (e.g. less possibility of unintended 
side-effects) and cons (e.g. more work when adding a new property to a 
"style"). It also requires more typing initially.

Hybrid Approach
---------------
You can also combine approach 1 and 2, e.g.

//BigText.qml
Text {
    font.family: bigText.family
    font.pointSize: bigText.fontSize
    color: bigText.color
    styleColor: anotherSetOfProperties.color
}

Regards,
Michael
_______________________________________________
Qt-qml mailing list
[email protected]
http://lists.trolltech.com/mailman/listinfo/qt-qml

Reply via email to