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