1

Red Hat Linux で Qt アプリケーションを開発しています。キャリッジ リターン キーの押下イベントをQComboBox.

Enter KeyeditTextChanged()ではなく、キーを押すたびに発行される信号にスロットを接続しました。 なんでそうなの?改行を検出する他の方法はありますか?

4

2 に答える 2

4

QComboBox::editTextChanged()スロットを作成し、それをシグナルに接続したと仮定します。
このシグナルは、テキストが変更され、Enterがテキストを変更せずに受け入れたときに発生します。キャリッジ リターンをキャプチャするには、いくつかの方法があります。

  1. サブクラスQComboBox
    オーバーライドkeyPressEvent(): 最初に呼び出しQComboBox::keyPressEvent()てから、押されたキーがEnterかどうかを確認します。そうである場合は、シグナルを送信します。
    必要なときにいつでもこのサブクラスを使用してください。方法がわからない場合は、QDesigner でのウィジェットのプロモーションについて検索してください。

  2. を継承する新しいクラスを実装しQObjectます。このクラスでは、オーバーライドeventFilter(): イベントがキーの押下かどうかを確認します。そうである場合は、それがEnterキーであるかどうかを確認します。そうである場合は、シグナルを送信します。
    次に、このクラスのインスタンスを作成し、それをイベント フィルタとして に設定しますQComboBox。実装したこのインスタンスの信号にスロットを接続します。

これらが明確でない場合は、次のページを読むことをお勧めします。

Qt デザイナーでカスタム ウィジェットを使用する

Qt イベントとイベント フィルター

于 2009-09-02T08:19:00.997 に答える
3

信号を調べることもできますactivated( const QString& )。ユーザーがEnterキーを押したときに発生する可能性があります。

于 2009-09-02T17:17:52.590 に答える