• 10205阅读
  • 3回复

请问如何提高QGraphicsItem的绘制速度呢? [复制链接]

上一主题 下一主题
离线srz007
 
只看楼主 倒序阅读 楼主  发表于: 2009-07-30
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
QGraphicsItem::paint () 这个是QGraphicsItem的绘制函数,被调用后就能够刷新界面
QGraphicsItem::update() 的帮助说明如下
This function does not cause an immediate paint; instead it schedules a paint request that is processed by QGraphicsView after control reaches the event loop.
也就是说我主动调用了update(),但并不能保证绘制函数一定被执行,只能等待到QGraphicsView 来调用QGraphicsItem的绘制函数

由此带来了如下问题,我在QGraphicsItem中实现了mousePressEvent和mouseReleaseEvent,并且在这两个函数中分别加载不同的图片,以达到鼠标按下和抬起时显示不同图片的目的。
我在mousePressEvent()、mouseReleaseEvent()和paint ()中分别加了打印,正常的打印结果应该如下
mousePressEvent
paint
mouseReleaseEvent
paint

功能已经实现了,但问题是响应速度不够快,如果我快速的点击然后抬起鼠标,那么paint ()只被调用了一次,打印结果是
mousePressEvent
mouseReleaseEvent
paint
比正常结果少了第二次的paint调用,也就是说我按下鼠标应该刷新的图片,没有刷新出来,只有在我按下鼠标等待大约1秒左右,才会刷新出图片来,这个问题该如何解决呢?谢谢大家!

我用的是qt4.5.2,在windows xp上写的代码,测试无问题,放到wince6上出现的上述现象,我想可能跟cpu速度有关系吧,但应该能通过其它办法解决的
离线duduqq

只看该作者 1楼 发表于: 2009-07-30
update好像会把几个更新事件合成一个再发送出去,可以试试用  repaint()
离线srz007
只看该作者 2楼 发表于: 2009-07-30
引用第1楼duduqq于2009-07-30 14:10发表的  :
update好像会把几个更新事件合成一个再发送出去,可以试试用  repaint()


QGraphicsItem没有repaint()函数,他自己的paint函数应该是一个回调函数,貌似只会被系统调用。
离线wontor
只看该作者 3楼 发表于: 2010-01-13
试试在update()以后调用一下qApp->processEvents();看看有没有效果
快速回复
限100 字节
 
上一个 下一个