Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt5 QOpenglWidget如何确保在mousemove envent期间立即更新场景?_C++_Qt_User Interface_Opengl_Rubber Band - Fatal编程技术网

C++ Qt5 QOpenglWidget如何确保在mousemove envent期间立即更新场景?

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绘制擦除

我目前正在使用Qt和openGL开发一个简单的类似CAD的绘图程序

我所做的是维护画布上的对象列表。
paintGL()
函数只是在列表中循环并逐个渲染对象

对象通过插槽
drawObject(Object obj)
馈送到列表,其中有一个
update()
函数来安排更新事件以更新场景

现在,我想做一些橡皮筋画线条:

拾取线条的一个端点后,每当我移动光标时,就会触发
mouseMoveEvent()
,它将为线条生成一个对象,并向
drawObject(object)
插槽发出信号。插槽所做的是通过xor绘制擦除旧的行,并在xor模式下绘制新行

我期望发生的是,每次移动鼠标时,都会将一个新对象渲染到场景中。然而,事实并非如此。例如,如果我移动鼠标 快速,然后在update()函数实际更新场景之前,已触发多个mouseMove事件,并且似乎从未处理过这些事件,即,通信对象从未进入屏幕。该程序实际上做的是,在快速拖动橡皮筋后,屏幕上会留下大量随机工件

这似乎是因为QOpenGLWidget的update()函数生成一个事件,通知小部件稍后重新绘制以提高性能

在我写这个问题的过程中,我发现了
repaint()
函数,它可以立即进行更新。然而,滞后是非常重要的:当我快速移动鼠标时,橡皮筋线没有跟随

所以,我的问题是,如何实现rubberband绘图,以便它能够利用update()机制来提高性能,同时不会出现屏幕上的故障

我已经搜索过了,但是我可以找到一篇关于快速移动鼠标的文章


提前谢谢你

您的绘制速度慢,或者您的mouseMoveEvent生成了大量不必要的事件。或者两者兼而有之。只要我们看不到代码,我们就无能为力。我也有同样的问题…你现在有什么建议吗?…谢谢你…@ShaoKui我已经好几年了,我不确定我最终得到了什么解决方案。很抱歉