介绍使用qsrand和qrand生成随机数。
生成随机数主要用到了函数qsrand和qrand,qsrand用来设置种子点,该种子为qrand生成随机数的起始值。如果不调用qsrand,那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。使用相同的种子生成的随机数一样。
下列代码生成了[0,99]之间的随机数:
- qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
- int test =qrand()%100;
代码如下:
- void generateUniqueRandomNumber()
- {
- int i,j;
- QList<int> numbersList;
- qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
- for(i=0;i<10;i++)
- {
- numbersList.append(qrand()%10);
- bool flag=true;
- while(flag)
- {
- for(j=0;j<i;j++)
- {
- if(numbersList[i]==numbersList[j])
- {
- break;
- }
- }
- if(j<i)
- {
- numbersList[i]=rand()%10;
- }
- if(j==i)
- {
- flag=!flag;
- }
- }
- }
- for(i=0;i<10;i++)
- {
- qDebug()<<numbersList[i];
- }
- }
随机数生成后进行排序,使用排序函数qSort。
- void generateAscendRandomNumber()
- {
- int i;
- QList<int> numbersList;
- qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
- for(i=0;i<10;i++)
- {
- numbersList.append(qrand()%10);
- }
- qSort(numbersList.begin(),numbersList.end());
- for(i=0;i<10;i++)
- {
- qDebug()<<numbersList[i];
- }
- }
新版本的QT,qsrand和qrand函数已经丢弃,使用新的类QRandomGenerator。如需要生成正随机数:
quint32 value = QRandomGenerator::global()->generate();