2

値が 123.45 の QSpinBox があるとします。手動で編集して 5 を消去し始めると、値 123.4 に対して valueChanged が発生します。4つ消していくとまた起こる。

また、編集終了後にエンターを押すと起動します。

問題は、valueChanged の代わりに void QAbstractSpinBox::editingFinished () を使用する必要があることだと思いますが、私の意見にはさらに多くの例と使用法があるため、valueChanged が推奨されるアプローチだったようです。

何か案が?

4

3 に答える 3

2

最後に、Qt ドキュメントでkeyboardTrackingプロパティを見つけました。設定が簡単で、魅力のように機能します!

于 2012-04-19T09:11:36.217 に答える
0

私の意見では、どちらのシグナルを使用しても問題ありません。いくつかの Qt フォーム要素にはeditingFinished、シグナルと????Changedシグナルの両方があります。

  • QLineEdit
  • QAbstractSpinBox サブクラス:
    • QDateTimeEdit
    • QDoubleSpinBox
    • Qスピンボックス

複数行QTextEditには、textChangedリターンキーを押すと新しい行が作成され、フォーカスは移動しません。

于 2012-04-19T07:52:23.137 に答える
0

たとえば、Enter キーが押された場合にのみ何かを実行するキー ハンドラを実装したい場合があります。もちろん、これは valueChanged() ほど高速ではありませんが、より効率的かもしれません...

このように見えるかもしれません

void MyWidget::keyPressEvent(QKeyEvent *event)
{
    int key = event->key();

    switch (key) {
        case Qt::Key_Return:
        case Qt::Key_Enter: {
            this->start();
            break;
        }
        case Qt::Key_Escape: {
            this->close();
            break;
        }
        default:
            QWidget::keyPressEvent(event);
    }
}

これは、独自の MySpinBox クラスではなく、親クラスに実装します。Enter キーは処理されないため、QSpinBox からその親に渡されます。これは、キーが MyWidget によって処理されない場合、関数の最後で行われることです。その後、基本クラスに渡されます。

于 2012-04-19T07:57:43.117 に答える