C++ Qt5 QOpenglWidget如何确保在mousemove envent期间立即更新场景?
我目前正在使用Qt和openGL开发一个简单的类似CAD的绘图程序 我所做的是维护画布上的对象列表。C++ Qt5 QOpenglWidget如何确保在mousemove envent期间立即更新场景?,c++,qt,user-interface,opengl,rubber-band,C++,Qt,User Interface,Opengl,Rubber Band,我目前正在使用Qt和openGL开发一个简单的类似CAD的绘图程序 我所做的是维护画布上的对象列表。paintGL()函数只是在列表中循环并逐个渲染对象 对象通过插槽drawObject(Object obj)馈送到列表,其中有一个update()函数来安排更新事件以更新场景 现在,我想做一些橡皮筋画线条: 拾取线条的一个端点后,每当我移动光标时,就会触发mouseMoveEvent(),它将为线条生成一个对象,并向drawObject(object)插槽发出信号。插槽所做的是通过xor绘制擦除
paintGL()
函数只是在列表中循环并逐个渲染对象
对象通过插槽drawObject(Object obj)
馈送到列表,其中有一个update()
函数来安排更新事件以更新场景
现在,我想做一些橡皮筋画线条:
拾取线条的一个端点后,每当我移动光标时,就会触发mouseMoveEvent()
,它将为线条生成一个对象,并向drawObject(object)
插槽发出信号。插槽所做的是通过xor绘制擦除旧的行,并在xor模式下绘制新行
我期望发生的是,每次移动鼠标时,都会将一个新对象渲染到场景中。然而,事实并非如此。例如,如果我移动鼠标
快速,然后在update()函数实际更新场景之前,已触发多个mouseMove事件,并且似乎从未处理过这些事件,即,通信对象从未进入屏幕。该程序实际上做的是,在快速拖动橡皮筋后,屏幕上会留下大量随机工件
这似乎是因为QOpenGLWidget的update()函数生成一个事件,通知小部件稍后重新绘制以提高性能
在我写这个问题的过程中,我发现了repaint()
函数,它可以立即进行更新。然而,滞后是非常重要的:当我快速移动鼠标时,橡皮筋线没有跟随
所以,我的问题是,如何实现rubberband绘图,以便它能够利用update()机制来提高性能,同时不会出现屏幕上的故障
我已经搜索过了,但是我可以找到一篇关于快速移动鼠标的文章
提前谢谢你 您的绘制速度慢,或者您的mouseMoveEvent生成了大量不必要的事件。或者两者兼而有之。只要我们看不到代码,我们就无能为力。我也有同样的问题…你现在有什么建议吗?…谢谢你…@ShaoKui我已经好几年了,我不确定我最终得到了什么解决方案。很抱歉