Qt在Linux中无法正确读取字符串

用户名

好吧,我会尽力解释。我有一个名为Calc的类,用于评估字符串或const char *数字表达式,例如“ 2 *(3/5)”或类似内容。

现在,我试图在Qt中构建一个计算器,使用这些类来评估QLineEdit的输入。

该类的工作方式如下:

Calc(const std::string &sExpresion);
Calc(const char* cExpresion);

void anadirExpresion(const std::string &sExpresion);
void anadirExpresion(const char* cExpresion);

我尝试像这样在Qt中使用它:

void Calculadora::evaluar()
{
    QLocale locale;
    QByteArray cadena = ui->pantalla->text().toLocal8Bit();
    const char* expresionAEvaluar = cadena.data();
    qDebug()<<"Cadena a evaluar: "<<cadena;
    std::cout<<"Cadena: "<<expresionAEvaluar<<std::endl;
    evaluador.anadirExpresion(expresionAEvaluar); //evaluador is the class Calc instance
    float resultado=evaluador.CalcularExpresion();
    qDebug()<<"Resultado: "<<resultado;
    ui->pantalla->setText(QString::number(resultado));    
}

这是尝试将Class与const char *表达式一起使用

这是使用std :: string表达式的尝试

void Calculadora::evaluar()
{
    //std::string cadena = ui->pantalla->text().toStdString();
    //qDebug()<<"Cadena a evaluar: "<<ui->pantalla->text();
    std::cout<<"Cadena: "<<ui->pantalla->text().toStdString()<<std::endl;
    evaluador.anadirExpresion(ui->pantalla->text().toStdString());
    float resultado=evaluador.CalcularExpresion();
    qDebug()<<"Resultado: "<<resultado;
    ui->pantalla->setText(QString::number(resultado));    
}

问题是我在“。”之后丢失了数据。字符。如果我的计算公式为“ 2.3”,则计算器的计算结果为“ 2”。此外,此问题仅在Linux中有效,因为在Windows下的Qt中它可以正常运行。而且它在Linux和Windows下的控制台模式下也可以正常工作。

同样,qDebug()和std :: cout在Qt控制台中的输出显示正确的字符串。

有什么建议吗?

对不起,我英语不好,谢谢你。

***更新:

最终,我认为该错误是因为在Linux下Qt下编译的函数atof()无法正常工作。我听起来没什么意思,但是我遵循“ 2.5”值来查找更改的位置,然后更改了该位置(成为Calc的成员函数)

EP[t].OP.operando=atof(aux);
std::cout<<"changed? "<<aux<<std::endl;
std::cout<<"changed: "<<EP[t].OP.operando<<std::endl;

在控制台下,atof()函数之后的EP [t] .OP.operando值为“ 2.5”。在Windows中也是如此。但是在Linux中,我得到“ 2”值。

现在我再试一次:

char cad[]="2.5";
EP[t].OP.operando=atof(cad);
std::cout<<"changed: "<<EP[t].OP.operando<<std::endl;

在控制台下,EP [t] .OP.operando值= 2.5,但在Qt下为2

也许是个错误?有人确认吗?

谢谢

马雷克

我怀疑语言环境会启动。您的系统语言环境可能是某种欧洲语言,其中小数点分隔符是逗号,而不是点。

要验证我的暂停状态,您可以:

  • 尝试,在测试过程中使用逗号()作为小数点分隔符,或者
  • 暂时将系统区域设置更改为US(或点号为小数点分隔符的其他语言),然后重新运行软件。
  • 您可以在此变量的日志值中打印(请参阅文档):

    qDebug() << "Decimal separator: " << localeconv()->decimal_point;
    

如果我是对的,那么这不是错误,而是功能:)。


我写了一些测试应用程序来验证我的悬架,是的,我写了这个插槽:

void MainWindow::processText(const QString &txt)
{
    std::string s = txt.toStdString();
    std::stringstream stream(s);
    double x;
    x = std::atof(s.c_str());
    emit atofResultString(QString::number(x));
    if (stream >> x) {
        emit stdstreamResult(QString::number(x));
    }
}

我已经在具有波兰语区域设置的Ubuntu 12.04上对此进行了测试。结果是atof考虑了系统区域设置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Qt在Linux中无法正确读取字符串

来自分类Dev

Qt串行端口无法正确读取字符串

来自分类Dev

程序无法正确读取字符串

来自分类Dev

无法成功读取字典值中的字符串?

来自分类Dev

无法读取字符串中的空格

来自分类Dev

在Haskell中读取字符串

来自分类Dev

在C ++中读取字符串

来自分类Dev

在Haskell中读取字符串

来自分类Dev

在C ++中读取字符串

来自分类Dev

从文件中读取字符串

来自分类Dev

读取整数后C无法读取字符串

来自分类Dev

扫描仪未正确读取字符串

来自分类Dev

在C中读取字符串以防止出现问题的正确方法是什么

来自分类Dev

如何从HttpRequest表单数据中以正确的编码读取字符串

来自分类Dev

无法从dbf文件读取字符串(但可以正确读取Number类型的数据)Java,DBFReader

来自分类Dev

sendSMS()方法无法读取字符串

来自分类Dev

Inno Setup:Exec无法读取字符串?

来自分类Dev

无法从MySQL表读取字符串到Eclipse

来自分类Dev

sendSMS()方法无法读取字符串

来自分类Dev

在C中逐字符读取字符串

来自分类Dev

ifstream错误从字符串中读取字符

来自分类Dev

在C中逐字符读取字符串

来自分类Dev

如何从Linux内核模块的sysfs属性文件中读取字符串?

来自分类Dev

无法正确匹配和提取字符串中的参数

来自分类Dev

从类的void中获取字符串值无法正确输出

来自分类Dev

从 xml 设置字符串时读取字符串目录不正确

来自分类Dev

如何从char **中读取字符串?

来自分类Dev

从共享内存C ++ POSIX中读取字符串

来自分类Dev

在NetLogo中读取字符串变量“ NaN”