1

Qt 4.7 を使用してミニ アプリケーションを作成しています。また、いくつかの QSpinBoxes と QDoubleSpinBoxes で問題が再発しています。editFinished() シグナルを設定し、これらのフィールドのいずれかの値を変更すると、スピンボックスがフォーカスを失ったときと Enter キーが押されたときの 2 つのシグナルを送信します。そのため、タブまたは入力ボタンを押すと、プログラムは計算を 2 回行います。lostFocus 信号のみを設定するスマートで簡単な方法はありますか?

PS私はQtの初心者です。私の英語で申し訳ありませんが、私はまだ学んでいます。

編集:

netrom をご利用いただきありがとうございます。

しかし、それはまだ何か間違っています...以下のようになりますか? コンパイルして実行できますが、SpinBox はまだ Enter ボタンに反応しているようです。

dialog.h:

#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QSpinBox>
#include <QKeyEvent>

namespace Ui {
    class SpinBox;
    class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    Ui::Dialog *ui;

private slots:
    void on_spinBox_editingFinished();
};

class SpinBox : public QSpinBox
{
  Q_OBJECT

public:
  explicit SpinBox(QWidget *parent = 0) : QSpinBox(parent) { }

protected:
  void keyPressEvent(QKeyEvent *event) {
    switch (event->key()) {
    case Qt::Key_Return:
    case Qt::Key_Enter:
      return;

    default: break;
    }

    QSpinBox::keyPressEvent(event);
  }
};
#endif // DIALOG_H
4

2 に答える 2

2

スピンボックス ウィジェットがスロットの最初にフォーカスを持っているかどうかを確認してみてください。editingFinished()シグナルが Enter/Return キーの結果なのか、フォーカスの喪失によるものなのかがわかります。

void Dialog::on_spinBox_editingFinished() {
    if(ui->spinBox->hasFocus()) 
        return;   

    // rest of your code
}
于 2011-10-24T02:33:56.490 に答える