永发信息网

QT Time 的延迟应用求教

答案:2  悬赏:0  手机版
解决时间 2021-03-04 22:52
  • 提问者网友:富士山上尢
  • 2021-03-03 22:53
QT Time 的延迟应用求教
最佳答案
  • 五星知识达人网友:渊鱼
  • 2021-03-04 00:02
QTime time;
time.start();
while(time.elapsed()>=spinBoxGap->value()*1000);
// 从此段代码可以看出,你是想设定一个时间间隔,执行一次循环time.elapsed(),但是你此处的time未设置间隔。具体设置好像直接start(1000)就可以了,1000单位是毫秒。,即每分钟循环执行1次。
// 给你推荐个方法采用QTimer(定时器)

timer = new QTimer();
// 设置定时器执行间隔
timer->setInterval(spinBoxGap->currentText().toInt() * 1000);
// 然后连接槽函数,执行相关操作即可
connect(timer, SIGNAL(timeout()), this, SLLOT(whatyoudo()));追问我后面有七八个处理语句和延迟,用做每个处理都等待一段时间,用qtimer的timeout()不好处理,用qtime有什么办法吗?追答// 你可以在线程中处理啊,完成一个后直接加个延迟就好了啊,非要用QTime吗? 
void MyThread::run()
{
    fun_1();
    sleep(1000); // 这里sleep中的毫秒可以用你的spinBox中的值传递过来,线程不能直接应用QSpinBox哦,通过主线程转换
    fun_2();
    sleep(2000);
    ...
}追问谢谢,不过我对线程不了解……,要是用QTime有办法吗?这也算是一种方法吧。我不想把每段处理都写成函数,追答// 哦,这样的话办法是有,不过可能导致主线程卡住
QTime time;
time.start();
while (1)
{    
    // 此处判断设置间隔时间,如果大于等于SpinBox中设置的值,那么执行
    if (time.elapsed()>=spinBoxGap->value()*1000)
    {
        ...; // 这里你只能做判断,到底执行那个步骤
    }
    // 一个步骤执行完成后重新启动time,让他重新开始计算
    time.restart();
    // 判断上面步骤是否执行完?如果完成结束循环
    if (!isRun)
    {
        break;
    }   
}追问如果你的if()可以判断执行,那我的while()也应该是可以的吧?追答你的while你仔细看就知道执行不了。此时的time.elapsed()应该等于0,你却判断要大大于spinbox设定的值才执行,你觉得合适吗?如果你按照小于的话怎么样结束呢?感觉此处还是用if比较好。追问嗯,是的,我逻辑写错了,昨天试了可以延迟,但不能操作其他的,而且出现:我后面的几个延迟好像全部无效,第一个延迟是所有延迟总和,最后所有动作一块执行,不知道怎么回事。追答具体操作不知道你是怎么弄的,不介意的话加我QQ我帮你看看:2893891799
全部回答
  • 1楼网友:罪歌
  • 2021-03-04 00:08
你这while语句什么都不做 就是延时你也看不出来呀 为什么不用QTimer
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯