我使用QT和C ++构建了我的第一个软件,它在Ubuntu 11.04和Mac OS X上编译时工作得很好。当我在Windows上编译时,我在GUI中得到了奇怪的输出。我已经将问题追踪到计算油漆坐标的错误。这是违规计算:
long x = ((pos-from) *width)/range ;
qDebug() << ***************;
qDebug() << "pos" <<"\t" << pos;
qDebug() << "from" <<"\t" << from;
qDebug() << "width" <<"\t" << width;
qDebug() << "range" <<"\t" << range;
qDebug() << "x" <<"\t" << x;
qDebug() << "***************";
来自Ubuntu的输出:
***************
pos 2500000
from 1
width 1005
range 4411537
x 569
***************
Windows的输出:
***************
pos 2500000
from 1
width 1574
range 4411537
x -81
***************
有没有人知道为什么我会为x获得不同的值?
干杯。
答案 0 :(得分:2)
如果使用gcc或类似(mingw)编译器,long
类型在32位平台上为32位,在64位平台上为64位。可能你的非windows“编译”是在64位平台上。 VC ++始终将long
视为32位。您可以尝试使用long long int
或__int64
(较旧的VC ++)(您只需要其中一个pos,width或range变量属于该类型,以便其他变量上传)。
答案 1 :(得分:1)
Windows中的长类型是32位。
当你使用Qt时,如果你想要64位len或qint64,你应该使用long long -type。
答案 2 :(得分:1)
您的width
值在每项测试中都有所不同,因此显然结果会有所不同。