1

QPlainTextEditウィジェットへのクリックを検出したいと思います。最終的な目標は、仮想キーボード ウィジェットを起動することです。ところで、QPlainTextEditウィジェットは QT ui ファイルに記述されており、によってロードされQUiLoaderます。QPlainTextEditイベントをキャッチするために、ウィジェットのイベント ハンドラーをインストールしようとしましたQEvent::FocusIn。残念ながら、このイベントは 1 回だけではなく、繰り返し発生します。

注: QT 4.8 を使用しています。

更新テキスト入力ウィジェットのソフトウェア入力パネルを起動する方法を示すチュートリアル/例を 見つけました。残念ながら、入力パネルは開いた直後に閉じます。基本的に、イベントQEvent::CloseSoftwareInputPanelは の直後に発生しQEvent::RequestSoftwareInputPanelます。

4

2 に答える 2

0

QEvent::RequestSoftwareInputPanel解決策は、イベントをトリガーすることです(参照) 。

void InputPanel::saveFocusWidget(QWidget *oldFocus , QWidget *newFocus )
{
    // check if newFocus is not null or top-level widget or previous widget
    // check if newFocus is QPlainTextEdit 
    QEvent event( QEvent::RequestSoftwareInputPanel );
    QApplication::sendEvent( newFocus , &event );
}
于 2013-07-12T17:59:55.467 に答える
0

マウス プレス イベントだけを検出する場合は、ウィジェットのviewport()ウィジェットにイベント フィルターをインストールします。詳細についてはQAbstractScrollArea、ドキュメントを参照してください。

通常、FocusIn イベントは繰り返し発生してはなりません。installEventFilter1 つのウィジェットに対して複数回呼び出した可能性がありますか?

まだFocusInイベントを使用して、繰り返しイベントを無視できるかもしれません。

于 2013-06-27T14:14:01.107 に答える