在Windows下编译的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() << "***************";

在Windows下编译的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() << "***************";,c++,qt,C++,Qt,以及Windows的输出: *************** pos 2500000 from 1 width 1574 range 4411537 x -81 *************** 有人知道为什么我会得到不同的x值吗 干杯。如果您使用的是gcc或类似(mingw)编译器,long类型在32位平台上为32位,在64位平

以及Windows的输出:

        *************** 
        pos      2500000 
        from     1 
        width    1574 
        range    4411537 
        x        -81 
        *************** 
有人知道为什么我会得到不同的x值吗


干杯。

如果您使用的是gcc或类似(mingw)编译器,
long
类型在32位平台上为32位,在64位平台上为64位。您的非windows“编译器”可能位于64位平台上。VC++始终认为
为32位。您可以尝试使用
long-long-int
\uuuu-int64
(较旧的VC++)(您只需要将pos、宽度或范围变量中的一个设置为该类型,以便将其他变量升级)

如果您使用的是gcc或类似(mingw)编译器,
long
类型在32位平台上为32位,在64位平台上为64位。您的非windows“编译器”可能位于64位平台上。VC++始终认为
为32位。您可以尝试使用
long-long-int
\uuuu-int64
(较旧的VC++)(您只需要将pos、宽度或范围变量中的一个设置为该类型,以便将其他变量升级)

Windows中的长类型为32位


如果在使用Qt时需要64位len或qint64,则应使用long-long-type。

Windows中的long-type为32位


如果在使用Qt时需要64位len或qint64,则应使用long-long-type。

您的
宽度
值在每个测试中都不同,因此结果显然会不同。

您的
宽度
值在每个测试中都不同,因此结果显然会不同。

完成了这项工作。非常感谢。这就成功了。非常感谢。是的,那是因为每个都在不同的显示器上运行。但这不应该给x一个负值。正如建议的那样,使用qint64代替long解决了这个问题。谢谢,那是因为每个都在不同的监视器上运行。但这不应该给x一个负值。正如建议的那样,使用qint64代替long解决了这个问题。谢谢
        *************** 
        pos      2500000 
        from     1 
        width    1574 
        range    4411537 
        x        -81 
        ***************