1

キープレスを に関連付ける際に問題がありQActionます。私はEnter次のようなアクションにマッピングしています:

myAction->setShortcut(Qt::Key_Return);

問題は、 a に値を入力してから を押すと、QActionもトリガーされることです。スピンボックスがイベントを消費することを期待していました (したがって、メインウィンドウによってキャッチされません) が、そのようには機能しません。QSpinBoxEnter

ショートカットにコンテキストを追加できることを確認しました。すべての値を試しましたが、問題は解決しません。

@Matthew実際にイベントを拒否しています:

case Qt::Key_Enter:
case Qt::Key_Return:
    d->edit->d_func()->control->clearUndo();
    d->interpret(d->keyboardTracking ? AlwaysEmit : EmitIfChanged);
    selectAll();
    event->ignore();
    emit editingFinished();
    return;

この振る舞いはかなり奇妙だと思います。

4

2 に答える 2

1

私の知る限り、QSpinBoxデフォルトの動作は、を押しreturnて値を受け入れるまで待機します。技術的には、値を変更するとすぐに値が設定/受け入れられます。

その動作を変更しようとしている場合、つまり、値を押したときreturnQSpinBox値が実際に設定/受け入れられた場合は、関連するキー押下イベントを自分で処理し、QSpinBox受け入れ済みとしてマークする必要があります(つまりevent->accepted())。

それ以外の場合、これは元の設計どおりに機能しているように聞こえますが、希望どおりではありません。

于 2012-08-13T13:45:20.377 に答える
0

PyQtとQLineEditでのみ、まったく同じ問題があります

QActions は常にメニュー アクションまたはグローバルと見なされ、Widget Default キーよりも優先度が高い可能性があります。

私の「解決策」は、重要なキー (Return、Tab、Backspace など) をショートカットとして使用して、アクションのグローバル リストを作成することでした。

次に、QLineEdit の focusInEvent と focusOutEvent にフックします。イベントが発生するたびに、アクション リストをループして focusIn ですべて非アクティブ化し、focusOut で再度アクティブ化します。次に、元のフォーカス イベント ハンドラーにイベントを渡します。

より良い解決策があることを本当に願っています。

于 2012-09-04T01:32:50.480 に答える