QLineEdit
ユーザーが数字だけを入力する必要がある場所があります。
では、数字のみの設定はありQLineEdit
ますか?
回答:
QLineEdit::setValidator()
、 例えば:
myLineEdit->setValidator( new QIntValidator(0, 100, this) );
または
myLineEdit->setValidator( new QDoubleValidator(0, 100, 2, this) );
3.14e-7
。QDoubleSpinBox
科学的記数法の数値は受け入れません(Qt5.5)。
最高はQSpinBox
です。
また、二重値の場合はを使用しますQDoubleSpinBox
。
QSpinBox myInt;
myInt.setMinimum(-5);
myInt.setMaximum(5);
myInt.setSingleStep(1);// Will increment the current value with 1 (if you use up arrow key) (if you use down arrow key => -1)
myInt.setValue(2);// Default/begining value
myInt.value();// Get the current value
//connect(&myInt, SIGNAL(valueChanged(int)), this, SLOT(myValueChanged(int)));
正規表現バリデーター
これまでのところ、他の回答は、比較的限られた桁数のソリューションしか提供していません。ただし、任意または可変の桁数が必要な場合はQRegExpValidator
、を使用して、桁のみを受け入れる正規表現を渡すことができます(user2962533のコメントに記載されています)。最小限の完全な例を次に示します。
#include <QApplication>
#include <QLineEdit>
#include <QRegExpValidator>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLineEdit le;
le.setValidator(new QRegExpValidator(QRegExp("[0-9]*"), &le));
le.show();
return app.exec();
}
にQRegExpValidator
はメリットがあります(そしてそれは控えめな表現にすぎません)。それは他の有用な検証の束を可能にします:
QRegExp("[1-9][0-9]*") // leading digit must be 1 to 9 (prevents leading zeroes).
QRegExp("\\d*") // allows matching for unicode digits (e.g. for
// Arabic-Indic numerals such as ٤٥٦).
QRegExp("[0-9]+") // input must have at least 1 digit.
QRegExp("[0-9]{8,32}") // input must be between 8 to 32 digits (e.g. for some basic
// password/special-code checks).
QRegExp("[0-1]{,4}") // matches at most four 0s and 1s.
QRegExp("0x[0-9a-fA-F]") // matches a hexadecimal number with one hex digit.
QRegExp("[0-9]{13}") // matches exactly 13 digits (e.g. perhaps for ISBN?).
QRegExp("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}")
// matches a format similar to an ip address.
// N.B. invalid addresses can still be entered: "999.999.999.999".
オンライン編集動作の詳細
ドキュメントによると:
行編集にバリデーターが設定されている場合、returnPressed()/ editingFinished()シグナルは、バリデーターがQValidator :: Acceptableを返した場合にのみ発行されることに注意してください。
したがって、行編集により、最小量にまだ達していない場合でも、ユーザーは数字を入力できます。たとえば、ユーザーが正規表現に対してテキストを入力していなくても"[0-9]{3,}"
(3桁以上必要)、行編集により、ユーザーは入力を入力してその最小要件に達することができます。ただし、ユーザーが「少なくとも3桁」の要件を満たさずに編集を終了した場合、入力は無効になります。信号returnPressed()
とeditingFinished()
は放出されません。
正規表現に最大境界(例"[0-1]{,4}"
)がある場合、行編集は4文字を超える入力を停止します。また、文字セット(すなわちのために[0-9]
、[0-1]
、[0-9A-F]
、など)が行編集のみから文字ができ、その特定のセットが入力されます。
私はこれをmacOSのQt5.11でのみテストし、他のQtバージョンやオペレーティングシステムではテストしていないことに注意してください。しかし、Qtのクロスプラットフォームスキーマを考えると...
inputMask
:を設定することもできます
QLineEdit.setInputMask("9")
これは、ユーザーが至るまで唯一の桁を入力することを可能にする0
には9
。複数9
のを使用して、ユーザーが複数の数字を入力できるようにします。完全なも参照してください入力マスクで使用できる文字リスト。
(私の答えはPythonですが、C ++に変換するのは難しいことではありません)
QT Creator 5.6を使用している場合は、次のように実行できます。
#include <QIntValidator>
ui->myLineEditName->setValidator( new QIntValidator);
ui-> setupUi(this);の後にその行を置くことをお勧めします。
これがお役に立てば幸いです。
new QIntValidator(this)
。そうしないと、ウィジェットがスコープ外になるとすぐにバリデーターオブジェクトがリークします。