gpt4 book ai didi

c++ - Qt QString::toDouble() 返回 int 0

转载 作者:行者123 更新时间:2023-11-30 00:55:29 37 4
gpt4 key购买 nike

我正在读取 xml 文件并尝试将数据解析为 double 据。它正在读取数据并在应用程序输出中显示适当的字符串,但不会从字符串转换为 double 。这是执行转换的代码部分。

if ( !(imgDur = QString ( xmlReader->readElementText() ).toDouble()) ){
imgDur = 10;
}

这将返回数字 0。我得到零错误并且代码编译通过。为什么这行不通?谢谢你的时间。

读取XML文件的整个循环

//Parse the XML until we reach end of it
while(!xmlReader->atEnd() && !xmlReader->hasError()) {
// Read next element
QXmlStreamReader::TokenType token = xmlReader->readNext();
//If token is just StartDocument - go to next
if(token == QXmlStreamReader::StartDocument) {
continue;
}
//If token is StartElement - read it
if(token == QXmlStreamReader::StartElement) {

if(xmlReader->name() == "time_delay") {
qWarning() << xmlReader->readElementText(); // OUTPUTS 15

if ( !(imgDur = QString (xmlReader->readElementText()).toDouble() ) ){
qWarning() << "AS AN DOUBLE" << imgDur; // OUTPUTS 0
imgDur = 10;
}

}

if(xmlReader->name() == "value") {
qWarning() << xmlReader->readElementText(); // OUTPUTS 8
}

}
}

最佳答案

您代码的主要问题是这个 qWarning() << xmlReader->readElementText(); // OUTPUTS 15线。 QXmlReader::readElementText()将 xmlReader 指针移动到文本节点的末尾,因此 readNext()将返回 EndElementA而不是 QXmlStreamReader::Characters token 。所以基本上readElementText做类似的事情(请注意,在实际实现中它要复杂得多,因为它检查默认行为,设置 QXmlStreamReader 内部数据/状态/ token 等):

QString retval;
if(xmlReader->readNext() == QXmlStreamReader::Characters)
{
retval = xmlReader->text().toString();
xmlReader->readNext();
}
return retval;

所以基本上是第二 xmlReader->readElementText();将始终返回空 QString,因为当前标记不是 QXmlStreamReader::StartElement不再

关于c++ - Qt QString::toDouble() 返回 int 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12398138/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com