提问人:sashoalm 提问时间:11/17/2012 最后编辑:Tabsashoalm 更新时间:8/8/2019 访问量:148418
将 QLineEdit 设置为仅接受数字
Set QLineEdit to accept only numbers
答:
QLineEdit::setValidator()
例如:
myLineEdit->setValidator( new QIntValidator(0, 100, this) );
或
myLineEdit->setValidator( new QDoubleValidator(0, 100, 2, this) );
请参见:QIntValidator、QDoubleValidator、QLineEdit::setValidator
评论
3.14e-7
QDoubleSpinBox
最好的是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)));
评论
您还可以设置 inputMask
:
QLineEdit.setInputMask("9")
这允许用户仅键入一个介于 和 之间的数字。使用多个 ' 允许用户输入多个数字。另请参阅可在输入掩码中使用的字符的完整列表。0
9
9
(我的答案是用Python,但将其转换为C++应该不难)
你为什么不为此目的使用 a ?您可以使用以下代码行将向上/向下按钮设置为不可见:QSpinBox
// ...
QSpinBox* spinBox = new QSpinBox( this );
spinBox->setButtonSymbols( QAbstractSpinBox::NoButtons ); // After this it looks just like a QLineEdit.
//...
评论
如果您使用的是 QT Creator 5.6,您可以这样做:
#include <QIntValidator>
ui->myLineEditName->setValidator( new QIntValidator);
我建议你把那行放在ui->setupUi(this)之后;
我希望这会有所帮助。
评论
new QIntValidator(this)
正则表达式验证器
到目前为止,其他答案仅为相对有限的数字数提供解决方案。但是,如果您关心的是任意或可变数量的数字,则可以使用 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".
更多在线编辑行为
根据文档:
请注意,如果在行 edit 上设置了验证器,则仅当验证器返回 QValidator::Acceptable 时才会发出 returnPressed()/editingFinished() 信号。
因此,即使尚未达到最小数量,行编辑将允许用户输入数字。例如,即使用户没有根据正则表达式输入任何文本(至少需要 3 位数字),行编辑仍允许用户键入输入以达到该最低要求。但是,如果用户在未满足“至少 3 位数字”的要求的情况下完成编辑,则输入将无效;信号,不会发出。"[0-9]{3,}"
returnPressed()
editingFinished()
如果正则表达式具有最大边界(例如),则行编辑将停止任何超过 4 个字符的输入。此外,对于字符集(即 、 、 等),行编辑只允许输入该特定集中的字符。"[0-1]{,4}"
[0-9]
[0-1]
[0-9A-F]
请注意,我只在macOS上使用Qt 5.11对此进行了测试,而不是在其他Qt版本或操作系统上。但考虑到Qt的跨平台模式......
演示:正则表达式验证器展示
评论