小白学Qt篇-定时器Timer的应用

在制作界面的开发的过程中,定时器的应用无疑是重中之重,今天我们来看一下Qt中的定时器是什么样子的。Qt的定时器有两种QObject的定时器和QTimer类。

1.首先来熟悉一下定时器,定时器是指定一个规定时间,在时间超时后发出超时信号(timeout),然后根据超时信号,来触发事件,从而满足我们想要完成的功能。

2.我们先来看一下QObject中的定时器,在用startTimer()函数启动一个定时器后,在timerEvent(QTimerEvent*)函数来处理定时器事件,所以需要我们要重写 void timerEvent(QTimerEvent* ev)函数,在里面加上我们想要的处理方式如:

    void timerEvent(QTimerEvent* ev)
    {

//先确定是哪个定时器在工作
        if (ev->timerId() == m_timerId) {
            // 处理定时器事件
            qInfo()<<__FUNCTION__;
            change();
        } else {
            // 处理其他定时器事件
            return ;
        }
    }
重要的一点,QObject中的定时器每个都有自己的id,是int类型的。为了区分不同定时器的使用。

int m_timerId;

m_timerId = startTimer(500);

//结束定时器

killTimer(m_timerId);

2.第二种就是我们的QTimer类中的定时器,我们需要新建一个QTimer类型的对象,在处理超时事件时我们要用connect()函数来进行链接,并在槽函数种定义超时事件的处理方式。

time=new QTimer(this);

//QTimer::timeout是超时信号,onTimerOut1是自定义的槽函数。

connect(time, &QTimer::timeout, this, &Widget::onTimerOut1);

//开起与结束

time->start(1000);

time->stop();

3.下面我们用定时器来实现一个简单的图片切换

首先看到我们在qrc文件种添加了五张图片,图片的路径名称相似方便我们做处理。

大家记住一定不要用中文路径,否则是加载不出来的。

我事先在ui界面添加了一个label控件名称是pixlabel,所以这里是这样调用的

void Widget::pixnint()
{
    QString pixPath;
    //pixPath.append(":/image/mode1.png");
    static int Pixnum=1;
    Pixnum++;
        pixPath=QString(":/image/mode%1.png").arg(Pixnum);

//arg函数发挥了重要的作用,它让我们切换图片很方便。具体的用法就是,%1占位符里填充的就是arg()中的括号里的数。本例就把Pixnum也就是1放进了字符串%1的位置中。
        qInfo()<<pixPath;
    //QThread::msleep(10000);,阻塞进程一秒钟不要轻易使用
    ui->pixlabel->setPixmap(QPixmap(pixPath));
    //ui->pixlabel->setPixmap(QPixmap(":/image/mode1.png"));
    ui->pixlabel->setScaledContents(true);

//设置一个小循环
    if(Pixnum==5) Pixnum=0;
}

我们这里选择用槽函数来执行,也就是QTimer类的应用

    void onTimerOut1()
    {
        qInfo()<<__FUNCTION__;
        //change();
        pixnint();
    }

再在两个按钮中规定开始和结束

void Widget::on_autoshift_clicked()
{
    time->start(1000);
    //m_timerId = startTimer(500);
}
void Widget::on_pushButton_2_clicked()
{
    time->stop();
    //killTimer(m_timerId);
}

最后我们来看一下效果把

Widget 2024-03-24 11-21-03

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值