Wyl*_*SG. 3 validation double user-interface qstring qt
我正在尝试使用该QString::toDouble()
功能验证用户输入.该文件说,函数应该这样使用:
double QString::toDouble ( bool * ok = 0 ) const;
/*
Returns the string converted to a double value.
Returns 0.0 if the conversion fails.
If a conversion error occurs, *ok is set to false; otherwise *ok is set to true.
*/
Run Code Online (Sandbox Code Playgroud)
所以我试图使用它*ok
来抛出错误消息,如果它的错误,目的是只允许用户输入有效的整数或小数.问题是即使输入单词,消息也始终返回有效.到目前为止,这是我的代码:
void MainWindow::checkData()
{
bool validate;
QString tempStr;
tempStr = ui->lineEditValidate->text();
double converted = tempStr.toDouble(&validate);
if (validate = false)
{
QErrorMessage validateError;
validateError.showMessage("Input is Invalid");
validateError.exec();
}
else
{
QErrorMessage worksFine;
worksFine.showMessage("valid");
worksFine.exec();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,我没有validate
正确地通过论证,但文件不够坚实,我真的不知道; 也许该QString::toDouble()
功能是将字母转换为值.
有人可以解释我哪里出错了吗?
if (validate = false)
// ^ problem! this is an assignment
Run Code Online (Sandbox Code Playgroud)
就这样,你设置validate
到false
系统,并测试该分配的结果-这是false
太.
这是不正确的.你需要:
if (validate == true) {
// ^^ comparison here
// conversion worked
} else {
// conversion failed
}
Run Code Online (Sandbox Code Playgroud)
省略布尔测试的比较更为常见:
if (valid) { // do stuff if valid ...
Run Code Online (Sandbox Code Playgroud)
要么:
if (!valid) { // do stuff if not valid ...
Run Code Online (Sandbox Code Playgroud)
您的变量将更好地命名valid
,conversionOk
或类似的东西.它不是一个动作,它不表示某些东西是否需要验证,而是表明该动作/验证的结果.