14

Completely new to QT and QML. I'm trying to set the color of a rectangle based on the relationship between the two propery doubles callValue and handRaiseXBB, but I get the error

unexpected token if"

and

expected a qualified name id

Could anyone tell me what I am doing wrong?

import QtQuick 2.0

Item{
    id: hand

    property double callValue: 0.0

    property double handRaiseXBB: 100
    property string handCallColor: "green"
    property string handFoldColor: "grey"

    Rectangle {
        anchors.fill: hand
        if (hand.callValue >= hand.handRaiseXBB) {
            color: hand.handFoldColor
        }
        else {
            color: hand.handCallColor
        }
    }
}
Q-bertsuit
  • 3,223
  • 6
  • 30
  • 55
  • 5
    Just remember that QML is declarative language, and you are able to write imperative code in functions or property bindings, but not in object definition. – QtRoS Dec 18 '14 at 08:11

2 Answers2

28

You can do it like this:

color: (hand.callValue >= hand.handRaiseXBB) ? hand.handFoldColor : hand.handCallColor

You could also make a function to calculate it and then assign the color property with the return value of the function:

function getHandColor()
{
    var handColor = hand.handCallColor
    if(hand.callValue >= hand.handRaiseXBB)
    {
        handColor = hand.handFoldColor
    }
    return handColor
}
color: getHandColor()
Retired Ninja
  • 4,785
  • 3
  • 25
  • 35
3

Another form to solve this is the following:

Rectangle {
    ...
    color: {
       color = hand.handCallColor
       if(hand.callValue >= hand.handRaiseXBB)
           color = hand.handFoldColor
    }
    ...
}

But the form with ternary operator is a better form!

QML is "based" in javascript, then i belive that all itens are javascript objects, how to:

var Rectangle: {
   color: "red",
   id: "id",
   //then we can do this
   setColor: function(_color) {this.color = _color}
}
JimSan
  • 915
  • 9
  • 19
user3854612
  • 127
  • 1
  • 1
  • 7