2016-07-25 3 views
1

Qtを使用してアクセシビリティツールを作成しています。キーボードを使用してマウスを操作することができます。マウスを本当に嫌う人も使えます。Qt.KeyEvent Shift + 0がどのような結果になるかはどのようにして判断できますか?

enter image description here enter image description here

このアプリケーションの固有の課題は、Qtのと何ができるかストレッチされていますが、幸いにもQtは弾力性があります。

ユーザーはCaps Lockを押してツールをアクティブにします。その後、ツールはフォーカスをスティールします。画面にグリッドが表示され、ユーザーは毎回マウスを小さく動かすキーを押します。

0を左にクリックすると、グリッドが消えます。 Altのダブルクリックを追加する。

Shiftキーを押したままマウスを右クリックすると、Ctrlキーを押しながら0を押すと中央をクリックします。

私が直面している問題は、キーボードでShift+0QKeyEvent(QKeyEvent.KeyPress, Qt.NoModifier, Qt.Key_ParenRight)(だから))になるということですが、これはまったく保証されていません。私のコンピュータが日本語のIMEであれば、私はQKeyEvent(QKeyEvent.KeyPress, Qt.ShiftModifier, Qt.Key_0)を得るでしょう。

japanese kb layout

ヘルプ、どのように私は私が私が聞く権利Qt.KeyEventを選択することができ、ユーザの現在のキーボードレイアウトに関する必要な情報を得ることができますか?

答えて

0

できません。すべてのレイアウトと現在のレイアウトを知っていたとしても、ユーザがshift+<key>を押すか、Caps Lockをオンにして<key>を押すユーザとの違いをどうやって作ってください。

ここでの問題は、shiftを修飾子として使用していることです。 このようにして、オファーのユーザーは設定を変更するか、標準の修飾キーを使用してフォールバックすることができます。

更新:コメント

+0

Microsoft Windowsには、既にマウスを制御するためのキーボードキーが定義されています。 https://support.microsoft.com/en-us/help/14204/windows-7-use-mouse-keys-to-move-mouse-pointer –

+0

下降理由: 1. Qtはすでに「キャップ私は上記のように、異なるキーコードを送信することによって、 "ロック"問題を解決します。 2.シフトはQtに従った修飾子です。 Qt.ShiftModifierを参照してください。 3.すべてのレイアウトと現在のレイアウト(およびその情報)が分かっている場合は、「0」を見つけてShiftキーを0にして、そのQKeyでQKeyEventsを探します。 4. MouseKeysはこれとは関係ありません。 –

+0

1.まだ '('と 'shift + 0'を押すと' '' 'と解釈されるので違いはありますか? 'shift + 0'は '(' .' –

0

を参照してくださいあなたは現在のレイアウトを知ることができたとしても、与えられたキーの組み合わせが異なるレイアウト間の翻訳可能であるという保証はありません。一部のキーはまったく使用できない場合があり、シフトキーの使用が競合するため、一部のキーの組み合わせが単純に不可能な場合があります。

実行可能な唯一の解決策は、キーボードショートカットを翻訳可能な文字列として扱うことです。これは、アプリケーションのショートカットのデフォルトセットを決定し、次にサポートする各ロケールの最も一般的なキーボードレイアウトに基づいて、providing translatationsを選択することを意味します。

これを実行すると、実行時にローカライズされたショートカット文字列の関数へのマッピングを作成することができ、現在のロケールで割り当てられた実際のキーの組み合わせとは独立してキーイベントを解釈できます。

このようなシステムでは、キーボードショートカットのユーザー設定を簡単にサポートできることにも注意してください(一般的なメカニズムはほぼ同じです)。

PS:コメントで指摘したように、それが信頼できないとして

、あなたは、QKeyEvent.modiifiers()を使用しないでください。代わりにQGuiApplication.keyboardModifiers()を使用してください。

+0

この場合、翻訳可能な文字列は、ユーザーのロケールに基づいてユーザーにキーボードレイアウトを適用する際の貧弱なソリューションです。はい、ほとんどの時間は動作しますが、すべてではありません。 UIの 'QLocale'の代わりに' QInputMethod :: locale() 'を使うと、より良い結果が得られます。 ユーザーがキーボードショートカット(最後の段落)を設定できる場合にのみ、適切な解決策になります。 注:キーボードショートカットは、キーボードショートカットがUIの言語にのみ依存する場合は、キーボードショートカットに翻訳可能な文字列を使用することをお勧めします。 (例えば、アプリケーションメニューバーのアクションのショートカット) –

+0

@BenjaminT。問題の性質を考えれば、どんな解決策も妥協でなければならない。何も強制されていません。翻訳を使用するポイントは、すべてのユーザーに対して**デフォルト**のより良いセットを提供することです。これにより、95%のすぐれたソリューションが得られるはずです。残りの部分は、ショートカットをユーザが設定可能にすることによって、世話をすることができます。 – ekhumoro

関連する問題