我们来学习一些小知识点,分别是定时器的时间,系统时间,以及随机数,这里要说明一下,事件和信号是不一样的,不要混淆了,表面看起来都是为了触发某个功能,实际上你可以理解为时间他更偏向底层一些
一.定时器事件
我们其实学习过定时器
在这个小项目中,我们使用的是通过timeout信号去实现的定时触发,实际上,与上篇一样,我们QT也有对应的事件,我们来看下:
- void timerEvent(QTimerEvent * event);
使用起来很简单
this->id = startTimer(1000);
我们直接调用startTimer来指定间隔时间,单位是ms,返回一个int,这是一个id
void MainWindow::timerEvent(QTimerEvent *event)
{
if(event->timerId() == this->id)
{
QDebug() << "触发";
}
}
这样,每隔1s就会触发一次,如果想停止这个定时器
killTimer(id);
现在发现这个id的用处了吧!
二.系统时间
系统时间的获取,可以这样来实现
QDateTime time = QDateTime::currentDateTime();
QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
this->ui->tv_time->setText(str);
我们通过QDateTime 的静态函数currentDateTime获取到之后转换格式即可,但是这里获取的是一个静态值,如果我们想要实现一个钟表,就需要借助上面的计时器,也就是我们的定时器事件中应该这样去写:
void MainWindow::timerEvent(QTimerEvent *event)
{
if(event->timerId() == this->id)
{
QDateTime time = QDateTime::currentDateTime();
QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
this->ui->tv_time->setText(str);
}
}
这样即可实现钟表
三.随机数
随机数就一个函数qrand(),他的公式为
- qrand() % N (N后面接的是0 - N的区间)
我们来实现一个移动的小案例,用上面的例子来处理,我们随机移动这个时间控件
void MainWindow::timerEvent(QTimerEvent *event)
{
if(event->timerId() == this->id)
{
QDateTime time = QDateTime::currentDateTime();
QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
this->ui->tv_time->setText(str);
int a = qrand()%300;
this->ui->tv_time->move(a,a);
}
}
这样就可以达到效果了