QT新手的疑问
谢邀,Qt做的不多。这段代码应该是SDK的消息泵。意图应该是每次消息循环调用update,如果不是游戏的话,应该是没有必要的,会严重影响系统运行效率。kinect应该是调用Windows下的directdraw,因此不能直接用wmpaint响应,所以SDK中习惯性写到消息泵下。Qt中应该不是使用directdraw。
■网友
大致有以下几种方法可供参考:1、用QTimer或者QBasicTimer来实现定时器,按照一定频率执行update()函数,这也是最为传统的简单的方式,前者只需要定义一个槽函数,后者则重写当前Widget/Window的timeEvent()即可2、在独立的线程,例如QThread里执行您的更新过程,不过注意到您在原文中提到更新UI,不知道是否是Qt自己的UI,那样的话不建议因此引起不必要的数据冲突3、事实上您可以自己管理Qt的消息循环,而不用调用app.exec(),例如下面的方式while ( !quitFlag ){ QCoreApplication::processEvents(QEventLoop::AllEvents, 100); // your update code}当然这里存在一个可能的隐患,就是模态的QDialog会暂时阻塞主进程而自己开启一个新的消息循环,这是您采用这种方案所无法监测到的
■网友
1.派生QApplication/QCoreApplication,重写QCoreApplication::notify,你的update放这个里面,别忘了调基类的notify;2.用timer。
■网友
我觉得并不需要每次消息循环都去更新GUI,只在你必要的时候更新必要widget 的状态就可以了。。。当然这样你就得自己写一遍code而不是换一个实现方法来移植win32的这个代码。最好不用新的thread,我曾经做过一个试验,用新的thread来控制主widget,动不动就死了。主要问题出在你要控制GUI的地方一定要插入主事件循环才能做,放在thread循环里就不work,而放进主循环的话你起这个thread根本没意义。加timer来响应比较简单,但如前所说你其实不需要每次都update,只在必要的时候做一个signal就可以了,可以是在响应某个经常性event的时候检查,比如cursor motion。或者干脆自己重写事件循环,但是不那么必要吧。
推荐阅读
- 喜欢养花必养的3种花,插叶子就能活,适合养花新手
- 新手养护花卉,就养张似白珍珠,花香袭人的花卉,美极了!
- 王者荣耀李白能不能出肉
- 大三学生准备日本留学过程中要不要准备考研
- 工作3、4的人怎样转行当警察
- 孩子|小孩发烧的处理方法有物理降温与药物退烧!但很多新手父母不会
- 游戏中有哪些让人感动的情节
- 华威大学计算机本科咋样
- 为啥没人做好KTV的UI
- 为啥现在没有一家信用评级系统的公司
