8

我正在尝试在 Qt 4.2 的行编辑框中应用验证器,但它不起作用:

 QDoubleValidator *haha= new QDoubleValidator(this);
 haha->setBottom(0.00);
 haha->setDecimals(2);
 haha->setTop(100.00); 
 get_line_edit()->setValidator(haha);

或者

 QDoubleValidator *haha= new QDoubleValidator(0.00,100.00,2,this);

无论哪种方式,我仍然可以输入我想要的任何值。

但如果我切换到QIntValidator,它的工作原理!

所以我去谷歌搜索了一下,很多人曾经遇到过同样的问题。它是一个错误吗?或者我应该做一些其他的设置?

4

7 回答 7

10

刚刚被这个绊倒了。尝试将 QDoubleValidator 表示法设置为:

doubleValidator->setNotation(QDoubleValidator::StandardNotation);
于 2014-10-10T19:19:50.043 回答
5

验证器文档说,当输入是任意双精度但超出范围时,它会从“验证”返回“中间”。

您需要通过使用行编辑控件(例如,通过发出“returnPressed”信号)区分中间输入和用户想要提交的最终输入。如果用户键入“10000”,这仍然是 0 到 100 之间数字的有效中间输入,因为用户可以在此输入前加上“0.”。

于 2012-04-12T09:08:01.950 回答
1

您必须为您的验证器设置符号

QLineEdit *firstX;
QDoubleValidator* validFirstX = new QDoubleValidator(-1000, 1000, 3, ui.firstX); 
validFirstX->setNotation(QDoubleValidator::StandardNotation);

然后它可以工作但不完全正确。有趣的部分是它控制数字而不是数字本身。例如,在本例中,您可以在 QLineEdit 1000 中输入 9999。

于 2015-06-19T04:46:00.760 回答
1

&& ( input.toDouble() > top() || input.toDouble() < bottom())

于 2016-03-24T12:42:17.907 回答
0

此示例在 4.8 中运行良好。自 4.2 以来,它看起来并没有改变,所以我怀疑问题在于您如何创建 QLineEdit。这是该示例中的相关代码。

QLineEdit* validatorLineEdit;
validatorLineEdit = new QLineEdit;
validatorLineEdit->setValidator( new QDoubleValidator(-999.0, 999.0, 2, validatorLineEdit));

您是如何创建行编辑的?

于 2012-04-12T07:56:36.570 回答
0

为了澄清,使用QDoubleValidator::setNotation(QDoubleValidator::StandardNotation)

例子:

QDoubleValidator* doubleValidator = new QDoubleValidator(-999.0, 999.0, 2, validatorLineEdit);
doubleValidator->setNotation(QDoubleValidator::StandardNotation);
validatorLineEdit->setValidator(doubleValidator);
于 2014-10-22T13:02:35.417 回答
0

如果您将验证器设置为 aQLineEdit那么您可以使用该函数hasAcceptableInput()来检查输入的值是有效还是无效。例如:

if (!ui->lineEdit_planned_count_vrt->hasAcceptableInput())
{
    slot_show_notification_message("EDIT_PLAN_COUNT_VRT", notification_types::ERROR, INVALID_INPUTED_VALUE);
    return;
}
bool isOk = false;
double value = ui->lineEdit_planned_count_vrt->text().toDouble(&isOk);
//do something with the value here....
于 2020-07-09T07:16:19.243 回答