QML信号执行两次

时间:2012-09-26 14:04:10

标签: qt qml blackberry-10 qt-signals

我是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
        }
    } 
}

我在另一个QML中有TextField,其ID为textFieldKey,其中包含我在上面发布的那个。主要思路很简单,就是一个键盘,其中每个键都是上面代码的一个组成部分,它必须打印在TextField中按下的键的值。

问题是,正如我所说的那样,信号被调用两次,每次用{2}字符填充TextField

请帮帮我,我不知道是否可能因使用信号或类似信息而错过了某些内容。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

每个人都识别0到3的数字。

当触发触摸信号时,涉及两个状态,Down和Up。你只需要确定你想要使用它并在onTouch信号中捕获它:

if (event.touchType == numberOfTheTouchState){
}

答案 1 :(得分:0)

您想要使用

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

如前所述,如果没有这个,你可以同时获得上下事件