"NaN"または "nan"を有効な値として入力できるようにQSpinBoxを拡張しようとしています。ドキュメントによると、私はtextFromValue、valueFromText、およびこれを達成するための関数を検証する必要がありますが、私はそれがまだ数字以外のテキストを入力することを許可して以来、それを働かせることができません。ここで私は私の.hと.cppのファイルの中に持っているものです。QSpinBoxは有効な値としてNaNを入力します
CPPファイル:
#include "CustomIntSpinBox.h"
CustomIntSpinBox::CustomIntSpinBox(QWidget *parent) : QSpinBox(parent)
{
this->setRange(-32767,32767);
}
QString CustomIntSpinBox::textFromValue(int value) const
{
if (value == NAN_VALUE)
{
return QString::fromStdString("nan");
}
else
{
return QString::number(value);
}
}
int CustomIntSpinBox::valueFromText(const QString &text) const
{
if (text.toLower() == QString::fromStdString("nan"))
{
return NAN_VALUE;
}
else
{
return text.toInt();
}
}
QValidator::State validate(QString &input, int pos)
{
return QValidator::Acceptable;
}
Hファイル:
#ifndef CUSTOMINTSPINBOX_H
#define CUSTOMINTSPINBOX_H
#include <QSpinBox>
#include <QWidget>
#include <QtGui>
#include <iostream>
using namespace std;
#define NAN_VALUE 32767
class CustomIntSpinBox : public QSpinBox
{
Q_OBJECT
public:
CustomIntSpinBox(QWidget *parent = 0);
virtual ~CustomIntSpinBox() throw() {}
int valueFromText(const QString &text) const;
QString textFromValue(int value) const;
QValidator::State validate(QString &input, int pos);
};
#endif // CUSTOMINTSPINBOX_H
が不足している何かイムありますか?または間違っている?これを行う簡単なやり方であれば、知っていると素晴らしいかもしれません...
いくつかの提案、質問とは独立して:ここでは、コンパイル例です。//:あなたがしなければならない場合を除き、基本クラスは、([サッター/アレキ](HTTPないので、(1)スロー仕様を使用しないでください。 www.amazon.com/Coding-Standards-Rules-Guidelines-Practices/dp/0321113586)、Item 75)。 (2)あなたのctorを明示的にする(同上、項目40)。 (3)ヘッダーに 'using namespace'を書かないでください(同上、項目59)。 (4) '#define'の代わりに' static const int NAN_VALUE = 32767; 'を使います(同上、項目16)。 (5) '#include'(コンパイルが遅くなります)をしないでください。 (6) 'QString :: fromStdString(" nan ")'(より速い)の代わりに 'QLatin1String(" nan ")'を使います。 –