参考链接:
第10篇 基础(十)Qt定时器和随机数 · Qt 快速入门系列教程
目录
自我实践:
MainWindow.h文件
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
int randomNum(int max);//随机函数
public slots:
void onTimeout();//槽函数
private:
Ui::MainWindow *ui;
QTimer *timer;//定时器
};
MainWindow.cpp文件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//定义定时器
timer = new QTimer(this);
//设置3秒执行一次
timer->setInterval(3000);
//将定时器信号与对应的槽函数连接
connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
//启动定时器
timer->start();
}
void MainWindow::onTimeout()
{
//关闭定时器,防止中断中发生中断
timer->stop();
int i = 0;
//获取当前时间
QTime curTime = QTime ::currentTime();
//输出随机数
qDebug() << __LINE__ << randomNum(3) << i++;
//获取当前时间--分、秒
qDebug() << __LINE__ << curTime.minute() << curTime.second();
//启动定时器
timer->start();
}
//获取随机数
int MainWindow::randomNum(int max)
{
//获取当前时间(静态)
QTime m_stime1 = QTime(0, 0, 0);
//获取当前时间(动态)
QTime time2 = QTime::currentTime();
//获取两者毫秒数生成随机种子
uint time = time2.msecsTo(m_stime1);
qDebug () << "time" << time;//查看种子
//设置随机数种子
qsrand(time);
//生成随机数
int randNum = qrand() % max;
return randNum;
}
结果:
有上述可知,定时器和随机函数基本实现了。但是最近我发现了另一条链接讲的比较清晰,所以来补充一些理论知识(上述参考链接第三个)
一、定时器
Qt有两种方法来使用定时器
定时器事件、信号和槽
如果是使用了多个定时器最好使用定时器事件来处理。
1、定时器事件
基类:QWidget
重写函数:void timerEvent(QTimerEvent *);
开启定时器:startTimer(毫秒)
如果开启了多个定时器,判断是哪个定时器:event.timerId()
例如:
if (event->timerId() == id1) {}
这里先使用timerId()函数返回了溢出的定时器id,然后给根据id判断哪个定时器溢出了,从而进行对应的处理。
2、信号和槽
这个就是我开头使用的方法了
1、在头文件中添加一个私有槽声明
2、然后在构造函数中new一个定时器
3、设置信号和槽,将定时器和对应事件相关联
4、start()启动定时器
二、随机数
Qt中使用qrand() 和 qsrand()两个函数实现。
qsrand()生成随机数
qrand() 控制范围----0-9十位随机数就%10,100以内随机数%100以此类推。
且qrand()函数要设置初值,否则就不随机。
上面我也使用了时间差来生成随机数。
就这样啦结束!