If you thought Qt provided you with a robust count of math algorithms already, you’ll be in for a surprise. There is qrand()
, but it doesn’t quite provide you with the user-friendliness of other languages. For example, sometimes you want a random number that is negative. Sure, you can do this all manually, but then you’d have to write your own function. Unfortunately, that’s exactly what you’ll have to do.
http://developer.nokia.com/Community/Wiki/Generating_random-value_integers_in_Qt
#include <QGlobal.h> #include <QTime> int QMyClass::randInt(int low, int high) { // Random number between low and high return qrand() % ((high + 1) - low) + low; } // Create seed for the random // That is needed only once on application startup QTime time = QTime::currentTime(); qsrand((uint)time.msec()); // Get random value between 0-100 int randomValue = randInt(0,100);
It is recommended that you don’t use qrand()
by default if you want to generate encryption-level random numbers.
So, with that code, now you can set a range of numbers which you can pull random numbers from. Make note that qsrand() only sets the seed and you should only do that once.
This is not a very good method to generate random numbers within a given range.(In fact its veryvery bad for most generators )
You are assuming that the low-order bits from the generator are uniformly distributed . This is not the case with most generators.
You should scale using multiplication and division. Not using the modulo operator.
eg
my_number= start_required + ( generator_output * range_required)/generator_maximum;
if generator_output is in [0, generator_maximum]
my_number will be in [start_required , start_required + range_required]
Unfortunately, it is what comes with Qt and that’s sufficient for my needs (game engine). If it was being used to implement security, then I agree it should be more complex.