QT开发(七)—— 定时器事件,系统时间,随机数

我们来学习一些小知识点,分别是定时器的时间,系统时间,以及随机数,这里要说明一下,事件和信号是不一样的,不要混淆了,表面看起来都是为了触发某个功能,实际上你可以理解为时间他更偏向底层一些

一.定时器事件

我们其实学习过定时器

在这个小项目中,我们使用的是通过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);
    }
}

这样就可以达到效果了

这里写图片描述

有兴趣的可以加群:690351511

猜你喜欢

转载自blog.csdn.net/qq_26787115/article/details/79989610