1.生成随机数
生成随机数主要用到了函数qsrand和qrand,这两个函数在#include <QtGlobal>中,
qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间。而如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。使用相同的种子生成的随机数一样。
下列代码生成了[0,255]之间的3个随机数。用于生成不同颜色
#include <QTime>
void generateRandomNumber()
{
qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()));
for(int i=0; i<3; i++)
{
int test =qrand()%256;
QTest::qSleep(1);
qDebug()<<test;
}
}
注意:
这里我用的 是 msecsTo,并且加了 QTest::qSleep(1);防止连续可能会生成相同的随机数;
2.生成指定范围随机数
int generateRandomNumber(int min,int max)
{
qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()));
int num = qrand()%(max-min)+min;
qDebug()<<num;
return num;
}
3.生成不重复的随机数组
将产生的随机数存放到数组中,在每次产生新的随机数的同时,在随机数列表中检查是否包含该数
如果包含则重新生成,直到生成新的随机数为止。
int getRandom(int min,int max)
{
QList<int> list;
int i,j;
bool res = true;
qsrand(QTime(0, 0, 0).msecsTo(QTime::currentTime()));
for (int i=0; i<10; i++) {
int num = qrand()%(max-min)+min;
list.append(num);
while(res)
{
for(j=0;j<i;j++)
{
if(list[i]==list[j])
break;
}
if(j<i)
{
list[i] = qrand()%(max-min)+min;
}
if(j==i)
res=!res;
}
}
}
4.产生随机字符串
QString getRandomString(int length)
{
qsrand(QDateTime::currentMSecsSinceEpoch());
const char ch[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int size = sizeof(ch);
char* str = new char[length + 1];
int num = 0;
for (int i = 0; i < length; ++i)
{
num = rand() % (size - 1);
str[i] = ch[num];
}
QString res(str);
return res;
}