2013-10-24 23 views
1

我有一个巨大的数字的问题。我从QSettings中检索一个数字。Qt数据类型错误与大数字

settings.beginGroup("filesizes"); 
this->fileSize = settings.value(309355).toLongLong(); 
qDebug() << __FILE__ << ":" << __LINE__ << std::numeric_limits<qlonglong>::max();    
qDebug() << __FILE__ << ":" << __LINE__ << "this->filesize: " << this->fileSize; 
qDebug() << "loaded filesize" << this->fileSize; 

存储在设置中的数字是12062891612(〜11,x GB,以字节为单位)。第四行返回我“-822010276”,我不明白为什么。 this-> fileSize是qint64。我减少了设置的数量,只要它小于2147483647(2^31-1),一切都没问题,但在上面我得到负数。我不明白,因为longlong和qint64应该够了?! 有没有人有想法,最新出了什么问题?

在此先感谢!

+0

使用'QVariant :: toULongLong()'是否会给出相同的结果? – vahancho

回答

0

您需要将您的数据类型切换到quint64以获得更大的最大值2^32-1。它只给你一个额外的位,而且它看起来好像很快就会在某些时候增长,并且需要提出一个更具创造性的解决方案,比如将未来的KB或MB存储为大小。

0

该问题似乎是在其他地方。所提供的代码片段工作正常,QSettingsQVariant都不会截断long long值。