QML

2017-03-14 14 views
0

私は次のような状況に直面してきました:QML

私はMouseAreaとの項目があります。これはスクリーン上の私のボタンです - キーボード。

  1. キーボードのボタンを長押しします。
  2. 私はこのボタンを押したままにしていません。
  3. onPressed {}シグナルハンドラで別の画面を開いています。
  4. キーボードからの私のbutonはもうリリースシグナルを受信しません。
  5. 前のキーボードに戻ったとき - 私のボタンはまだ押されました。

"pressed" = falseに設定しようとしましたが、これは読み取り専用プロパティです。

私はreleased()シグナルを出そうとしましたが、 "pressed"フラグはクリアされません。 しかし、私は間違った方法でそれをやったと思います。パラメータは、クリックのリリースのx、y位置、クリックの有無などのクリックに関する情報を提供します。 、それは助けにはならない。

を私は「押された」フラグをunsedしようとしなければならない他に何かわからない。

M Yマウス面積は単純です:

私のボタンで
MouseArea { 
    id: mouseArea 

    property bool haveToRelease: false 

    onHaveToReleaseChanged: { 
     if(haveToRelease) 
     { 
      console.log("BaseButton.qml: call canceled()") 
      released() 
      haveToRelease = false 
     } 
    } 

    anchors.fill: parent 
    hoverEnabled: true 

    onReleased: { 
     console.log("BaseButton.qml: onReleased") 
    } 

    onPressedChanged: { 
     console.log("BaseButton.qml: onPressedChanged, pressed = ", pressed) 
    } 
} 

私は次のハンドラがあります

onVisibleChanged: { 
    if(config.isToyota && !visible && pressed) { 
     console.log("Key.qml :: config.isToyota && !visible && pressed") 
     releaseButton = true 
    } 
} 

を誰かがこの問題を解決するために私を助けている場合、私は喜んで異なります! ありがとう!期待通りに動作します私のためとして

+0

私はあなたのコードに従うことができません。あなたはそれを[mvce](http://stackoverflow.com/help/mcve)にしてください。したがって、 'onPressed'とそれ以外の必要なものを含め、それを実行し、あなたの問題を見てください。 @folibisが示すように、それは動作します。したがって、エラーはどこかで発生する必要があります。 – derM

答えて

1

Window { 
    visible: true 
    width: 640 
    height: 480 

    Rectangle { 
     width: 100 
     height: 100 
     anchors.centerIn: parent 
     color: "orange" 
     MouseArea { 
      anchors.fill: parent 
      onPressed: { 
       console.log("pressed"); 
       wnd.show(); 
       released(mouse); 
      } 
      onReleased: { 
       console.log("released"); 
      } 
      onPressedChanged: console.log("pressed: " + pressed); 
     } 
    } 

    Window { 
     id: wnd 
     width: 200 
     height: 200 
    } 
} 

出力:

qml: pressed 
qml: released 
qml: pressed: true 
qml: pressed: false