在Windows下编译的QT应用程序执行计算不正确

时间:2011-10-05 12:16:21

标签: c++ qt

我使用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获得不同的值?

干杯。

3 个答案:

答案 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值在每项测试中都有所不同,因此显然结果会有所不同。