QT的一些範例中有出現 qmax, qmin 等 math函式的身影,但我在官方文件中卻找不到與 math函式相關的說明,所以我就把函式的source裡面提供的方法整理條列,並且看看還有哪些 math相關的函式可用。在 qglobal.h 裡,可以找到幾種 math函式,條列於下,但一般常用的 math如:qfloor(無條件捨去)、qceil(無條件進位)、qsin,qcos,qtan(三角函數) 等等等...則是都沒有看到。
說明:返回絕對值
範例:int absoluteValue;
int myValue = -4;
absoluteValue = qAbs(myValue);
// absoluteValue == 4
說明:返回極限不超過 min , max 的值, 等同於 qMax(min, qMin(value, max))
範例:int myValue = 10;
int minValue = 2;
int maxValue = 6;
int boundedValue = qBound(minValue, myValue, maxValue);
// boundedValue == 6
說明:返回最大值
範例:int myValue = 6;
int yourValue = 4;
int maxValue = qMax(myValue, yourValue);
// maxValue == 6
說明:返回最小值
範例:int myValue = 6;
int yourValue = 4;
int minValue = qMin(myValue, yourValue);
// minValue == 4
說明:返回四捨五入的整數
範例:qreal valueA = 2.3;
qreal valueB = 2.7;
int roundedValueA = qRound(valueA);
// roundedValueB = 2
int roundedValueB = qRound(valueB);
// roundedValueB = 3
說明:返最接近的64位元整數
範例:qreal valueA = 42949672960.3;
qreal valueB = 42949672960.7;
int roundedValueA = qRound(valueA);
// roundedValueA = 42949672960
int roundedValueB = qRound(valueB);
// roundedValueB = 42949672961
說明:thread-safe版本的標準C++亂數函式,返回 0 到 RAND_MAX之間的數字序列之下一個整數,使用qsrand(uint seed) 重新給定種子
範例:qreal valueA = qrand() % 100; // 41
qreal valueB = qrand() % 10; // 7
qreal valueC = qrand() % 2; // 0
qsrand(0xffffffff);
valueA = qrand() % 100; // 35
valueB = qrand() % 10; // 9
valueC = qrand() % 2; // 0
qsrand(0xffffff);
valueA = qrand() % 100; // 35
valueB = qrand() % 10; // 3
valueC = qrand() % 2; // 0
說明:比較兩個長浮點數的大小,如果兩者相同返回true,反之為否,同樣為thread-safe。另外也提供float版本的方法: bool qFuzzyCompare ( float p1, float p2 ) [static]
範例:qreal valueA = 42949672960.3;
qreal valueB = 42949672960.7;
bool equal = qFuzzyCompare(valueFA,valueFB);
// equal = false
訂閱:
張貼意見 (Atom)
Here is the blog of Mediakid (alias). You will find a mix of code, Flash Platform, Qt and other daily random thoughs I may have.




{id: "Ticore"}; //
08/11/21 下午7:13
基本常用的 math 方法
在 C++ StdLib 內就可以找到了
好像沒有必要特別去用 qt 的~
http://www.cplusplus.com/reference/
不過 C++ Reference 文件實在有點混亂
找了幾個網站,每個網站的版本都略有差異
沒有找到一個是最完整的 ><
mediakid
08/11/22 上午11:11
因為對c++不熟,又看到有qmin這些東西,想說要是有內建夠用的東西就太好了,看來qt內建的是很不夠用的,還是要透過c++的lib,感謝 Ticore大的分享和指教~
關於是否要使用qt僅有的math方法,我在source裡的說明一直看到一個關鍵字 "thread-safe",好像qt的書上有說到 QList這個container是thread-safe的,所以不知道這會不會是qt特別提供這幾個math方法的原因。
mediakid
08/11/23 上午1:38
在QT的書上看到一小段話,「如果你已經非常熟析STL容器並且在目標平台上STL是可用的,就沒有必要再使用Qt容器了。有關STL類和函數的更多信息,對初學者來講,SGI的STL網站 http://www.sgi.com/tech/stl/ 是一個好地方。」
一句話打到了我的兩個"甜蜜點",一個是我想應該就像Ticore大說的,對於math方法應該就是會了STL就不需要用Qt內建的math方法了,另一個是書本上也推薦了SGI的STL,給Ticore大參考看看~