QT QTimer单次触发槽函数延时处理

同一函数当中中,可能会先show一个提示窗口出来,然后紧接着就进入一段耗时代码,比如

	if(ptr_tip_window)
    {
        ptr_tip_window->set_info_text("正在进入,请稍后......");
        ptr_tip_window->show();
        ptr_tip_window->update();
    }

    login->login(userid_,roomid);//网络通信相关,会造成卡顿耗时

这种情况下,会发现提示窗口并没能及时显示出来,而是等耗时操作完成之后。这是因为是同一线程的操作,会存在这种先后关系的。这时,我们可以通过定时器来进行信号槽的触发,让耗时操作稍作延后。但常规的写法会相对复杂,要新建一个QTimer对象,然后再单独弄一个槽函数出来,最后再connect,费时费力。
而如果用以下单次触发的方式,结合lambda表达式的写法,就能在同一段代码中实现我想要的操作了。

	if(ptr_tip_window)
    {
        ptr_tip_window->set_info_text("正在进入,请稍后......");
        ptr_tip_window->show();
        ptr_tip_window->update();
    }
    
	//单次触发,延后100毫秒
	 QTimer::singleShot(100, this, [=](){
	    login->login(userid_,roomid);//网络通信相关,会造成卡顿耗时
	});

你可能感兴趣的:(qt,开发语言)