4

ユーザーがボタンを押したままにすると、コンテキスト メニューが開きます (便宜上、ボタンを使用します)。私が行った場合

    Button
    {
        text: model.ualabel

        MouseArea
        {
            preventStealing: true
            anchors.fill: parent
            onPressAndHold: uaContextMenu.open()
        }

        ContextMenu
        {
            id: uaContextMenu
            MenuLayout
            {
                MenuItem { /**/ } 
            }
        }
    }

次に、pressAndHold を担当する MouseArea がすべてのジェスチャを盗み、ボタンをクリックすることはできません。私は何を間違っていますか?私はQt 4.7を使用しており、インポートQtQuick 1.1してcom.nokia.meego 1.0

ありがとう

4

3 に答える 3

6

次のように、QMLのボタンで長押しをシミュレートできることがわかりました。

Button {
    id: button

    signal pressAndHold()

    Timer {
        id: longPressTimer

        interval: 2000 //your press-and-hold interval here
        repeat: false
        running: false

        onTriggered: {
            button.pressAndHold()
        }
    }


    onPressedChanged: {
        if ( pressed ) {
            longPressTimer.running = true;
        } else {
            longPressTimer.running = false;
        }
    }
}
于 2015-11-25T10:32:10.643 に答える
1

問題は、マウス イベントを受け取るために、マウス領域がボタンのマウス領域と競合していることです。マウス領域で設定propogateComposedEvents: trueしてみてください。これにより、イベントがビジュアル スタック内で下方向にボタンのマウス領域に伝播できるようになります。詳細については、http: //qt-project.org/doc/qt-5.0/qtquick/qml-qtquick2-mousearea.html#propagateComposedEvents-propを参照してください。

コメントを読んだ後、私の新しい提案は、mouseArea のクリックされた信号をボタンに手動で伝達することです。buttonId.clicked()これは、ボタンのクリック信号を手動で発信する呼び出しによって実行できるはずです。

于 2013-07-25T13:38:52.410 に答える