6

我是 QML 和 QML 信号的新手,我遇到了这个我自己无法解决的愚蠢问题。我正在触发一个onTouch信号并执行了两次,产生了双重响应,导致我的应用程序崩溃。

这是我的 QML 代码:

//LabelKey.qml

import bb.cascades 1.0

Container {

    property string labelText: "#"
    property real width: 153.3
    property real height: 102.5
    property int labelPosX: 60
    property int labelPosY: 25
    property int labelTextFontWidth: 45
    property string imgSrc: "asset:///images/keyboard_button.png"

    layout: AbsoluteLayout {
    }
    preferredWidth: width
    preferredHeight: height
    objectName: "contTecla"
    id: contTecla
    ImageView {
        objectName: "imgTecla"
        id: imgTecla1
        imageSource: imgSrc
        preferredWidth: width
        preferredHeight: height
        onTouch: {
            textFieldKey.text = textFieldKey.text + labelTecla.text;
        }
    }
    Label {
        objectName: "labelTecla"
        id: labelTecla
        text: labelText
        textStyle {
            color: Color.DarkYellow
            size: labelTextFontWidth
        }
        layoutProperties: AbsoluteLayoutProperties {
            positionX: labelPosX
            positionY: labelPosY
        }
    } 
}

我有这个TextField,它的 idtextFieldKey在另一个 QML 中,其中包括我在上面发布的那个。主要思想很简单,是一个键盘,其中每个键都是上面代码的一个组件,它必须打印在 this 中按下的键的值TextField

问题是,正如我所说,信号被调用了两次,TextField每次都用两个字符填充值。

请帮助我,我不知道我是否以正确的方式使用信号或类似的东西遗漏了一些东西。

谢谢!

4

2 回答 2

2

我想通了。触摸信号有 4 种不同的状态:

  • Down:当用户触摸屏幕时发生。

  • 移动:当用户在屏幕上移动手指时发生。

  • Up:当用户松开手指时发生。

  • 取消:取消交互时发生。

每个人都用一个从 0 到 3 的数字来标识。

当触发触摸信号时,会涉及两种状态,向下和向上。你只需要确定你想要使用的那个并在 onTouch 信号中捕获它:

if (event.touchType == numberOfTheTouchState){
}
于 2012-09-27T13:12:37.257 回答
0

你想用

ImageView
{
    objectName: "imgTecla"
    id: imgTecla1
    imageSource: imgSrc
    preferredWidth: width
    preferredHeight: height
    onTouch:
    {
        if(event.isDown())
        {
            textFieldKey.text = textFieldKey.text + labelTecla.text;
        }
    }
}

如前所述,没有这个,你会得到 up 和 down 事件

于 2012-11-21T17:29:28.440 回答