1

私は、テレビのリモコンで実行される埋め込み Webkit ブラウザー (Linux で Qt 4.8.0 を使用) に取り組んでいます。これまでのところほとんどすべてが機能しており、現在<input>、Web ページでタグを処理しようとしています。

私がやりたいことは、入力フィールドが選択されるたびに、仮想キーボードをポップして、ユーザーがリモコンでテキストを入力できるようにしてから、結果を にプッシュバックすることです。

私はそれを行うためにすでにいくつかの方法を試しました:

  • このチュートリアルを使用してQInputContextをインストールします。インストールした InputContext を通過するイベントがありません。
  • ブラウザのさまざまな段階でさまざまな再実装eventFilter()を行います (QApp、QGraphicsWebPage、QGraphicsWebView 内): LOADS のイベントが表示されますが、興味のあるイベントは表示されません ( QEvent::RequestSoftwareInputPanel/ QEvent::CloseSoftwareInputPanel/ FocusIn/ FocusOut/ Enter/ Leave)。
  • を使用installSceneEventFilter()すると、前のポイントと同じ結果が得られます。

私はマウスを使用していないので、「マウス ホバー」や「マウス クリック」などのイベントを処理して、<input>要素がフォーカスされているかどうかを判断することはできません。

だから私はどのように<input>ウェブページに接続して、フォーカスがいつそこに到達したかを検出できるのだろうかと思っています。ページ内の Javascript スクリプトを介して<input>フィールドが動的に挿入された場合でも、これは機能する必要があると思います。

接続できる Qt 信号はありますか?
動的に挿入された新しい入力フォームを処理するには?

まだ検討していない可能な解決策:QT_KEYPAD_NAVIGATIONアーチに mkspecs を使用し、通過する QEvent::EnterEditFocus をフィルター処理します。私はむしろ今持っているバニラ Qt に固執したいので、それは極端です (うまくいくかどうかはわかりません)。

4

1 に答える 1

1

ソリューションに興味がある方は、こちらをご覧ください。

  • addToJavascriptWindowObject()少なくとも 1 つのメソッドを持つ独自の C++ オブジェクトを挿入するために使用しますshowMultitap(cont QWebElement&)。「マルチタップ」という名前で挿入するとしましょう。

  • 次のような JavaScript コードを挿入します。

    document.addEventListener("フォーカス", 関数(e){
        window.multitap.showMultitap(e); // C++ オブジェクトに着陸します
    }、 真実);
    

実際に VK を表示する前に、要素がテキスト要素であることを C++ ハンドラで確認します。

  • 1 つの問題は、キーボード (またはリモート) の矢印だけでテキスト フィールドを終了できないことです。そのためDEFINES += QT_KEYPAD_NAVIGATON、Qt コンパイル プロセスに追加する必要があります (アーチの qmakespecs に配置するのが最善です)。 )。
于 2013-03-16T08:06:15.140 に答える