Hi,

I try to learn QML doing some very simple UI elements. Currently, I'm trying to 
learn, how to deal with signal and signal handlers. So, I wrote following a 
code:

Rectangle {
    id: textField
    property alias labelText: label.text
    //property string labelText: "label"
    width: 640
    height: 50
    color: "lightblue"
    border.color: "lightblue"
    radius: 5
    Text {
        id: label
        text: "label"
        font.bold: true; font.pointSize: 10
        anchors.left: parent.left; anchors.leftMargin: 5
        anchors.top: parent.top; anchors.topMargin: 5
    }
    MouseArea {
        anchors.fill: parent
        hoverEnabled: true
        onEntered: { console.log("mouse entered"); parent.focusGained() }
        onExited:  { console.log("mouse exited"); parent.focusRemoved() }
        onClicked: { console.log("mouse button clicked"); 
parent.textFieldClicked() }
    }
    signal textFieldClicked()
    onTextFieldClicked: {
        console.log("Got textFieldClicked")
        color = "red"
    }
    signal focusRemoved()
    onFocusRemoved:{
        console.log("Got removed")
        color = "lightblue"
        }
    signal focusGained()
    onFocusGained:{
        console.log("Got focusGained")
        color = "white"
        }
}

And somehow there is no logic, how my signal handlers are called with this 
code. E.g. when I move my mouse out from the rectangle, I get onExit to the 
MouseArea, but focusGained signal handler is called. I would of course expect 
onFocusRemoved to be called.

If I change my code to look like this:

Rectangle {

    id: textField

    //property alias labelText: label.text

    property string labelText: "label"

    width: 640

    height: 50

    color: "lightblue"

    border.color: "lightblue"

    radius: 5

    Text {

        id: label

        text: parent.labelText

        font.bold: true; font.pointSize: 10

        anchors.left: parent.left; anchors.leftMargin: 5

        anchors.top: parent.top; anchors.topMargin: 5

    }

    MouseArea {

        anchors.fill: parent

        hoverEnabled: true

        onEntered: { console.log("mouse entered"); parent.focusGained() }

        onExited:  { console.log("mouse exited"); parent.focusRemoved() }

        onClicked: { console.log("mouse button clicked"); 
parent.textFieldClicked() }

    }

    signal textFieldClicked()

    onTextFieldClicked: {

        console.log("Got textFieldClicked")

        color = "red"

    }

    signal focusRemoved()

    onFocusRemoved:{

        console.log("Got removed")

        color = "lightblue"

        }

    signal focusGained()

    onFocusGained:{

        console.log("Got focusGained")

        color = "white"

        }

}

Everything seems to work quite ok.
So it seems to be that property alias somehow causes unexpected signal handlers 
to be called.
(Row: property alias labelText: label.text)

Is this an issue with the QML or am  I doing something wrong here?
I'm using the latest Qt SDK on windows. (The Qt web pages talks Qt 4.7.1 but 
according to the SDK files it is Qt 4.7 SDK.)

Thanks for your help
-Simo

_______________________________________________
Qt-qml mailing list
Qt-qml@trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-qml

Reply via email to