【QT】随机数

时间:2025-03-25 07:30:23
//早期处理办法 先初始化随机数种子然后取随机数 qsrand(QTime::currentTime().msec()); //取 0-10 之间的随机数 qrand() % 10; //取 0-1 之间的浮点数 qrand() / double(RAND_MAX); //新版处理办法 支持5.10以后的所有版本包括qt6 QRandomGenerator::global()->bounded(10); //生成一个0和10之间的整数 QRandomGenerator::global()->bounded(10.123); //生成一个0和10.123之间的浮点数 QRandomGenerator::global()->bounded(10, 15); //生成一个10和15之间的整数 //兼容qt4-qt6及以后所有版本的方法 就是用标准c++的随机数函数 srand(QTime::currentTime().msec()); rand() % 10; rand() / double(RAND_MAX); //通用公式 a是起始值,n是整数的范围 int value = a + rand() % n; //(min, max)的随机数 int value = min + 1 + (rand() % (max - min - 1)); //(min, max]的随机数 int value = min + 1 + (rand() % (max - min + 0)); //[min, max)的随机数 int value = min + 0 + (rand() % (max - min + 0)); //[min, max]的随机数 int value = min + 0 + (rand() % (max - min + 1)); //如果在线程中取随机数,线程启动的时间几乎一样,很可能出现取到的随机数一样的问题,就算设置随机数为当前时间啥的也没用,电脑太快很可能还是一样的时间,同一个毫秒。 //取巧办法就是在run函数之前最前面将当前线程的id作为种子设置。时间不可靠,线程的id才是唯一的。 //切记 void * 转换到数值必须用 long long,在32位是可以int但是在64位必须long,确保万一直接用quint64最大 srand((long long)currentThreadId()); qrand((long long)currentThreadId());