• 5117阅读
  • 6回复

关于QTimer中singleShot的问题 [复制链接]

上一主题 下一主题
离线zpzbc18
 
只看楼主 倒序阅读 楼主  发表于: 2012-03-06
关键词: QT4QTimer


QTimer::singleShot(guard_delay_time*1000,this,SLOT(toPlay()));
guard_delay_time秒之后执行toplay()函数,但是如果在guard_delay_time期间我进行了别的操作,guard_delay_time时间后我不想执行toplay()这个函数了该怎么办!有什么办法可以关掉这个定时器
离线jdwx

只看该作者 1楼 发表于: 2012-03-06
回 楼主(zpzbc18) 的帖子
使用timer信号,就可以在计时的中间停止qtimer了。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线zpzbc18
只看该作者 2楼 发表于: 2012-03-06
请说具体点是用QTimer::stop()吗??会不会影响其他的地方的定时器
离线jdwx

只看该作者 3楼 发表于: 2012-03-06
回 2楼(zpzbc18) 的帖子
没错。
不会影响其他的,只会停止这个定时器。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线zpzbc18
只看该作者 4楼 发表于: 2012-03-06
回 3楼(jdwx) 的帖子
我试过了但是仍然不行啊我是这样写的
QTimer::singleShot(guard_delay_time*1000,this,SLOT(toPlay()));
定时器启动后我在执行QTimer::stop();但是仍然不能停止.
然后我又想下边这样写
if(playtimer)
        {        
            killTimer(playtimer);
            playtimer = 0;
        }
        int time = guard_delay_time-5;
        playtimer=startTimer((guard_delay_time-5)*1000);    

启动定时器然后我在一个事件触发后调用
f(playtimer)
        {        
            killTimer(playtimer);
            playtimer = 0;
        }
再次执行playtimer=startTimer((guard_delay_time-5)*1000);
但最后的结果是前一个定时器仍然执行,第二次启动的定时器在第一次执行完后开始执行
离线jdwx

只看该作者 5楼 发表于: 2012-03-06
回 4楼(zpzbc18) 的帖子
你弄混了两个东西:
1:startTimer是启动系统定时器(可能有别的名字),
事件由虚函数timerEvent处理。
2:QTimer是一个类,可以new出一个QTimer对象,我说的是QTimer。
而且你写的代码:QTimer::singleShot(guard_delay_time*1000,this,SLOT(toPlay()));
用的是QTimer类的静态函数。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线zpzbc18
只看该作者 6楼 发表于: 2012-03-07
QTimer delay;
delay.singleShot(guard_delay_time*1000,this,SLOT(toPlay()));
然后执行
delay.stop();
可以停止此定时器吗???
快速回复
限100 字节
 
上一个 下一个