我在一个基于QML的UI上工作,其中一些元素是用C ++插件实现的。 到目前为止,WinXP 32位和Win7 32位都运行良好。上周我在机上安装了Win7 64bit的新笔记本电脑,我的代码在那里无法正常工作。启动应用程序后几秒钟表现良好,但突然停止重新绘制视图。 QML启动的事件和QDeclarativeItem :: update()的插件调用都不起作用。在插件中,我100%确定调用update(),但后来我知道,调用覆盖QGraphicsItem :: paint()的调用不会按预期发生。当窗口获得/失去焦点时,视图才会重新绘制。
我已经在运行Win7的桌面上快速验证了我的应用程序,并且在那里没有任何问题。这导致我怀疑Windows 7在我的笔记本电脑和其他计算机上请求窗口更新的方式有所不同,但我现在无法找出差异。
有人可以帮助我了解那里发生了什么吗?
提前致谢!
P.S。不幸的是,我的原始模型没有出现同样的问题,我无法共享生产代码。如果我找到一种方法在原型中找到重现此问题的方法,我会发布它。
答案 0 :(得分:0)
在你的update()调用之后添加一个qapp-> processEvents(),它可能会起作用 (我遇到过类似的问题,但它发生在所有平台上,希望这个解决方案适合你)
答案 1 :(得分:0)
我的问题的答案在我的问题描述中最初忽略了。 QDeclarativeItem :: update()函数是从非Qt线程调用的(当然不是GUI线程)。 我通过Qt事件循环重新路由了调用,问题就消失了。
当时我在Qt 4.7 / 4.8上,并且不能说它在Qt 5.x中的表现如何。