QObject定时器-轮播图案例

QObject组成

QObject主要分为两个部分

  • startTimer() 开启定时器 参数是毫秒为单位的值(自己设宏定义)
  • killTimer() 关闭定时器 直接关闭

开启定时器

可以通过按钮等控件开启定时器

void Widget::on_startButton_clicked()
{
    myTimerId = this->startTimer(TIMEOUT);
}
  • startTimer是最大基类QObject的方法 所以可以直接使用this调用,Widget继承于最大基类
  • starTimer()参数为宏定义的时间 单位是毫秒
  • 需要用值来存储函数返回的定时器ID号(myTimerId)
在头文件中声明定时器函数
virtual void timerEvent(QTimerEvent * event);
  • 可以在widget.cpp中重写该函数
  • QTimerEvent * event 是当前定时器的ID号
重写定时器函数
void Widget::timerEvent(QTimerEvent * event)
{
    // 判断当前定时器id 是否与点击事件中保存的id一致
    if(event->timerId() == myTimerId)
    {
        //记录下绝对路径的地址 只需修改图片文件名称
        QString path("D:\\Qt online\\objectTimer\\");
        //将int强制转换成QString类型
        path += QString::number(picId);
        path += ".png";
        ui->label->setPixmap(path);

        //设置最大值
        picId++;
        if(picId == 4) picId = 1;
    };
  }
  • 需要先判断当前定时器的参数event的timerId()是否与开启定时器时获取的ID号相同
  • 用QString类型来存储绝对路径
  • 在绝对路径后面添加需要改变的图片名称
  • 需要将int类型的图片ID强转成QString类型 并且添加到地址path中
  • 调用label的内置函数setPixmap添加图片 参数为path
  • 不断修改图片ID号 来切换图片

初始化label中的图片
    //图片id
    picId = 2;

    // 设置初始图片
    QPixmap pix("D:\\Qt online\\objectTimer\\1.png");
    ui->label->setPixmap(pix);
  • 初始化图片ID 不要与初始的图片名称中数字一致
  • QPixmap是处理图像的一个类(这里使用QString一样可以)
  • 调用label的内置函数setPixmap添加图片 参数为path

关闭定时器

void Widget::on_stopButton_clicked()
{
    // 关闭定时器
    this->killTimer(myTimerId);
}
  • 调用killTimer() 参数为开始定时器时返回的ID号

注意如果同时开启了多个定时器不需要重复写多个timerEvent()函数,而是用开启定时器时的ID号去匹配定时器的timerId()就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值