• 10366阅读
  • 11回复

[提问]qt怎么实现延时输出 [复制链接]

上一主题 下一主题
离线qwe334455
 

只看楼主 倒序阅读 楼主  发表于: 2015-12-05
我想在显示了第一句话之后过几秒钟再显示第二句话,该怎么办呢

ui->label->setText("1");

ui->label->setText("2");

中间应该加点什么
离线yanwuyue

只看该作者 1楼 发表于: 2015-12-06
直接sleep会卡界面

定时器或者另外开线程sleep
离线qwe334455

只看该作者 2楼 发表于: 2015-12-06
回 yanwuyue 的帖子
yanwuyue:直接sleep会卡界面
定时器或者另外开线程sleep (2015-12-06 09:47) 

可以讲讲怎么写的吗?
要添加啊什么头文件,要在什么地方写什么函数
新手求指导一下
离线咬蚊嚼渍

只看该作者 3楼 发表于: 2015-12-06
加个timer,在timeout里改值
离线yanwuyue

只看该作者 4楼 发表于: 2015-12-06
定时器方式
头文件:
  1. protected:
  2.    void timerEvent(QTimerEvent *);

代码初始化里:
  1. this->startTimer(1000);//1000毫秒=1秒

例子(显示实时时间):
  1. void 类名::timerEvent(QTimerEvent *)
  2. {
  3.    ((QLabel*)ui->statusBar->children().at(0))->setText(tr("当前时间:%1").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")));
  4. }


你的就把要显示的数据放在一个QStringList里,每次显示第一个并把第一个删除




离线sevencat

只看该作者 5楼 发表于: 2015-12-07
ui->label->setText("1");

QTimer *timerlog = new QTimer(this);
    QObject::connect( timerlog, &QTimer::timeout,[this]
    {
        ui->label->setText("2");
    });
    timerlog->setSingleShot(true);
    timerlog->start(2000);
战争就是和平,自由就是奴役,愚味就是力量
离线tylan

只看该作者 6楼 发表于: 2015-12-07
定时器好一些。
离线hezf

只看该作者 7楼 发表于: 2015-12-07
定时器吧
完成动作再把它关掉就行了
不用定时器也可以使用下面的Qtime,这样会卡主线程,不建议
none
离线stlcours

只看该作者 8楼 发表于: 2015-12-07
    int ms = 你的等待时间,毫秒;
    QElapsedTimer t;
    t.start();
    while ((t.elapsed()<ms) )
        QCoreApplication::processEvents();
离线yanwuyue

只看该作者 9楼 发表于: 2015-12-08
回 stlcours 的帖子
stlcours:    int ms = 你的等待时间,毫秒;
    QElapsedTimer t;
    t.start();
    while ((t.elapsed()<ms) )
        QCoreApplication::processEvent .. (2015-12-07 18:35) 

这种卡主线程的都会把CPU一个核推到满载,为了一个这种功能浪费这么多资源不值得,临时一下可以考虑,长时间运行千万不能这么写
离线z609932088

只看该作者 10楼 发表于: 2015-12-08
timer  或者百度无阻摄延时,就可以了
有阳光的地方就是青春
离线stlcours

只看该作者 11楼 发表于: 2015-12-08
回 yanwuyue 的帖子
yanwuyue:这种卡主线程的都会把CPU一个核推到满载,为了一个这种功能浪费这么多资源不值得,临时一下可以考虑,长时间运行千万不能这么写 (2015-12-08 08:23) 

我还真没注意。我还以为processEvent会和Windows的WaitMessage一样,挂起等待激活,使用0资源呢(在我眼里,QT就应该做到这么智能,因为他们水平很高,而这个也只是小case)。我稍后做个实验,然后告诉你结果。
快速回复
限100 字节
 
上一个 下一个