我在一个基于QML的UI上工作,其中一些元素是在C++插件中实现的。到目前为止,在WinXP 32位和Win7 32位中一切运行正常。上周我买了一台安装了64位Win7的笔记本电脑,我的代码在那里不能正常工作。启动后几秒钟,应用程序运行良好,但随后视图突然停止重绘。无论是QML发起的事件,还是对QDeclarativeItem::update()的插件调用都不起作用。在插件中,我100%确定调用了update(),但是我知道,对覆盖的QGraphicsItem::paint()的调用不会像预期的那样发生。只有当窗口获得/失去焦点时,视图才会被重绘。
我已经在运行Win7的台式机上快速验证了我的应用程序,并且没有任何问题。这导致我怀疑Windows7在我的笔记本电脑和其他电脑上请求窗口更新的方式有所不同,但我现在无法弄清楚其中的区别。
有没有人能帮我了解一下那里发生了什么?
提前感谢!
附注:不幸的是,我的原始模型没有表现出同样的问题,并且我不能分享产品代码。如果在找到实际的解决方案之前,我能找到在原型中重现这个问题的方法,我会把它贴出来。
发布于 2012-03-26 20:28:02
在update()调用之后添加一个qapp->processEvents(),它可能会起作用。
(我遇到过类似的问题,但它在所有平台上都会发生,希望这个解决方案能为您工作)
发布于 2014-02-27 21:52:56
我的问题的答案在于我最初在问题描述中忽略的一些东西。从非Qt线程(当然不是GUI线程)调用QDeclarativeItem::update()函数。我通过Qt事件循环重新路由了调用,问题就解决了。
我当时在Qt4.7/4.8上,不能说它在Qt5.x中会有什么表现。
https://stackoverflow.com/questions/7635149
复制相似问题