2011-10-05 37 views
0

我已經使用QT和C++構建了我的第一個軟件,它在Ubuntu 11.04和Mac OS X上編譯時運行良好。當我在Windows上編譯時,我的GUI。我已經將問題追蹤到計算繪製座標的錯誤。這是有問題的計算:在Windows下編譯的QT應用程序不能正確執行計算

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?

乾杯。

回答

1

Windows中的長整型是32位。

如果你想在使用Qt時使用64位len或qint64,你應該使用long long型。

+0

非常感謝。是的,這是問題所在。現在一切都很好。 – nrhorner

2

如果您使用的是gcc或類似的(mingw)編譯器,則long類型在32位平臺上是32位,在64位平臺上是64位。可能你的非Windows「編譯」是在64位平臺上。 VC++始終認爲long是32位。您可以嘗試使用long long int__int64(較舊的VC++)(您只需要pos,width或range變量中的一個以使其他類型變爲該類型)。

+0

這樣做的工作。非常感謝。 – nrhorner

1

你的width每個測試的值都不一樣,所以顯然結果會不一樣。

+0

是的,那是因爲每個都在不同的顯示器上運行。但這不應該給x帶來負值。正如建議的那樣,問題是通過使用qint64而不是長時間來解決的。謝謝 – nrhorner

+0

好點,我收回。您應該標記其他答案之一,然後接受。 – cmannett85

+0

我該怎麼做? – nrhorner