• 11641阅读
  • 7回复

禁用QT绘图延时 [复制链接]

上一主题 下一主题
离线rootlife
 

只看楼主 倒序阅读 楼主  发表于: 2011-01-04
我在QT下绘图时发现一种现象,就是在PaintEvent 事件中,用QPainter绘图:

如下:
                    QPainter painter(this);
                    painter.drawLine(QPoint(0,0),QPoint(100,100));
                    sleep(1);
                    painter.drawLine(QPoint(220,220),QPoint(400,500));

我发现给图时并没有直接将线条绘制出来, 相反要等到出了 PaintEvent 的事件处理函数,才会将绘制过的图一股脑的全部绘制出来。

我试了几个窗口属性,没有效果。 想请问下,如何才能在PaintEvent事件中,画一条线就立即显示一条线。 就是要即时显示不要延缓。 因为我要做一个回放功能。 必须解决这个问题。、

请有经验的朋友,留下你值得借鉴的回复。                    灌水的就不要发了。
离线jybbx
只看该作者 1楼 发表于: 2011-01-05
QT中默认使用了双缓冲功能(即你现在已经测得的那种情况,只有PaintEvent结束后才绘制出来),在LINUX下的是可以取消双缓冲的,windows下好像不行的。因此,我的建议是你也使用这种双缓冲实现回放,即先将要绘制的内容画到QImage上保存,需要的时候再使之显示即可。我的提示不知道对你是否有用!
离线0sidamingbu0
只看该作者 2楼 发表于: 2011-05-07
有人会吗?我也正要解决这个问题
离线rootlife

只看该作者 3楼 发表于: 2013-07-13
好久之前的问题了, 现在回复一下.

我没有实验现在的QT版本是否能直接显示了, Windows也没试,因为Windows 的VS编程, 有GetDC可以用, 无须UPDATE,

我的解决方案, 是, 回放时, 记录回放的当前指针, 然后绘制一个线条,UPDATE一下, 不断的UPDATE, 因为回放本身就是慢动作, 所以不用担心效率的问题. 至于 UPDATE时 回放线条的内部逻辑处理, 各位自然能够解决了.    u are  more smart than me.

做了两年业务又回来做技术. 这是今年我在QT论坛发的第一个有意义的回复了吧.
离线pxiao_xiao

只看该作者 4楼 发表于: 2013-07-13
绘图机制本身就是异步调用 准备数据的地方和绘图的地方是分离的 回放的时候准备数据的对象备好数据调用update()  然后paint函数中获取你的数据绘制
离线jdwx

只看该作者 5楼 发表于: 2013-07-13
引用第4楼pxiao_xiao于2013-07-13 18:36发表的  :
绘图机制本身就是异步调用 准备数据的地方和绘图的地方是分离的 回放的时候准备数据的对象备好数据调用update()  然后paint函数中获取你的数据绘制

+1
不知道楼主是不是说:和MFC那样,鼠标移动线就跟着画出来了?
Qt绘图比较特别,必须在paintEvent里使用QPainter绘图,其它地方无效。

发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线rootlife

只看该作者 6楼 发表于: 2013-09-22
回 5楼(jdwx) 的帖子
很久以前的帖子, 感谢两位的回复, 一个大型的软件,用QT来实现所有记录的回放, 是件非常吃力 的事, 不过大部分动作都还可以接受. QT毕竟是跨平台的,  有缺陷是可以理解的.
离线piaoliushi

只看该作者 7楼 发表于: 2013-09-23
不要动不动就说Qt的缺陷,你说的回放用undo/redo完全可以搞定.
快速回复
限100 字节
 
上一个 下一个