QTimer::singleShot(0, this, slot函数);

 意味只要构造函数结束,同时主窗口显示出来就调用loadFile()函数,这样不会因为加载文件太大屏幕上看不任何东西。

  1. 在exec或show一个QWidget(及其子类)时,如果构造函数中需要做的工作需要消耗较多时间,会导致用户启动程序后,很长时间看不到界面的弹出。特别是如果这个消耗时间很长的工作并不影响程序的UI,而让用户去等待较长的时间显然是不合适的。
  2. 一个带UI的程序,如果在构造时需要用到UI的一些geo相关参数(如size),可能会出现显示问题。因为在构造动作结束之前,UI是不显示的。而UI不显示,geo相关参数是默认值,并不是Ui设计师或构造函数里设置的值。

以上两个问题,可以使用QTimer::singleShot(time, receiver, slot)来解决。这个函数将使得slot函数在time毫秒后被调用。为了避免上述两个问题,可以如下编写构造函数:
假设构造函数为myClass,消耗时间较长的代码放在函数longTime中,需要UI参数的代码放在needUI中;

myClass::myClass()
{
    // 其他必要操作
   ...
   QTimer::singleShot(0, this, needUI());
}

myClass::needUI()
{
    // 构造函数已经结束,可以正确获得geo相关参数
    ...
    QTimer::singleShot(0, this, longTime())
}

myClass::longTime()
{
    // 这里放置需要较长时间执行代码,如IO相关内容
}

例如,假设myClass是个图片处理工具。构造函数中做必要设置,结束后程序立即显示,即使图片还没有加载;在needUI函数中就可以成功获取程序的size,然后将图片以合适的大小显示在程序中;最后longTime可能是一个图像处理算法,需要几秒钟来得到需要结果,然后再显示在程序中。

参考: 

QTimer.singleShot与QWidget初始化 - 走看看

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值