2012-10-11 8 views
7

ハンドル)。しかし、これは期待どおりに動作していないようです。私は、それぞれ自分のアプリケーションでタブを切り替えるためには二つの重要なイベント<code>Ctrl</code> + <code>Tab</code>と<code>Ctrl</code> + <code>Shift</code> + <code>Tab</code>(「前方」と「後方」を扱いたいキーイベントはCtrl + TabキーとCtrl + Shift + Tab

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

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つのエラーを参照してください。他の一つではない全く前者のキーシーケンスが二回処理されます。

  • EDIT:他方がまったく処理されないことを理由が解消され、コメントを参照してください。

なぜこれが起こり、どうすれば解決できますか?

注:私はすでにQtコンポーネントを自分のアプリケーションで使用していますので、このモジュールが必要なソリューションが分かっていれば問題ありません。

+2

私は、Qtが 'Qt :: Key_Tab'の代わりに' Shift' + 'Tab'を' Qt :: Key_Backtab'にマップしていると思います。これは2番目の問題を解決しますが、キーイベントが2回*受信されるという問題は解決しません。 – leemes

答えて

7

イベントを受け入れる必要があります。それ以外の場合、イベントは受理されるまで親に伝播されます。次のコードは私のために働いた。

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; 
      } 
     } 
    } 
} 

編集:この動作は、親がホットキーのようなもののために、その子ができなかったイベントを処理することができます。

希望すると便利です。

+1

あなたのコードにエラーがあります。 'event.modifiers && Qt.ControlModifier'は' event.modifiers == Qt.ControlModifier'でなければなりません。それ以外の場合、第2のキーイベントは 'event.modifiers'と組み合わせて動作します。 – Jaruba

関連する問題

 関連する問題