7

アプリケーションのタブを切り替えるために、2つの主要なイベント+と++を処理したいと思います(それぞれ「順方向」と「逆Ctrl方向TabCtrl)。ただし、これは期待どおりに機能していないようです。ShiftTab

これは私の現在のコードです(最小限の例):

import QtQuick 1.1

Item {
    width: 100
    height: 100

    focus: true

    Keys.onPressed: {
        if(event.modifiers & Qt.ControlModifier) {
            if(event.key === Qt.Key_Tab) {
                if(event.modifiers & Qt.ShiftModifier)
                    console.log('backward')
                else
                    console.log('forward')
            }
        }
    }
}

このコードをqmlviewer(Qtバージョン4.8.2)で実行しました

Ctrl+を押したときの出力Tab

forward
forward

Ctrl+ Shift+を押したときの出力Tab

無し

したがって、2つのエラーが表示されます。前者のキーシーケンスは2回処理されますが、もう1つはまったく処理されません。

  • 編集:もう一方がまったく処理されない理由は解決されました。コメントを参照してください。

なぜこれが発生し、どうすればこれを解決できますか?

注:私はすでにアプリケーションでデスクトップ用のQtコンポーネントを使用しているので、このモジュールを必要とするソリューションを知っていれば問題ありません。

4

1 に答える 1

8

イベントを受け入れる必要があります。そうしないと、イベントは受け入れられるまで親に伝播されます。次のコードは私のために働いた。

Item {
    width: 100
    height: 100

    focus: true

    Keys.onPressed: {
        if(event.modifiers && Qt.ControlModifier) {
            if(event.key === Qt.Key_Tab) {
                console.log('forward')
                event.accepted = true;
            }
            else if(event.key === Qt.Key_Backtab) {
                console.log('backward')
                event.accepted = true;
            }
        }
    }
}

編集:この動作により、親は、ホットキーなど、子が実行できなかったイベントを処理できます。

お役に立てれば!

于 2012-11-10T19:58:13.530 に答える