2

I am currently working on a simple CAD-like drawing program using Qt and openGL.

What I am doing is that I maintain a list of objects which is on the canvas. The paintGL() function is just loop through the list and render the objects one by one.

objects are fed to the list via slot drawObject(Object obj), in which there is an update() function to schedule an update event to update the scene.

Now, I want to do some rubberband drawing of lines:

After pick one endpoint of the line, whenever I move the cursor, a mouseMoveEvent() is triggered and it will generate an object for the line and emit a signal to drawObject(Object) slot. what the slot does is to erase the old line by doing xor drawing, and draw the new line in xor mode as well.

What I expect to happen is that every time the mouse is Moved, a new object is rendered to the scene. However, it is not. For example, if I move the mouse fast, then before the update() function actually update the scene, multiple mouseMove events has been triggered and it seems that these events are never been handled, i.e., the correspondence objects never goes to screen. What the program actually does is that a lot of random artifacts is left on the screen after a fast rubberband dragging.

It seems that this is due to the fact that what update() function of QOpenGLWidget does is that it generate an event to inform the widget to redraw later for performance purpose.

During the course of me writing this question, I discovered the repaint() function which do an immediate update. However, the lagging is quite significant: when I move the mouse fast, the rubberband line is not following.

So, my question is, how to implement the rubberband drawing so that it could take advantage of the update() machanism to boost the performance while not having those glitches on the screen?

I have searching around on this but I could find a single article talking about this fast-moving mouse stuff.

Thank you in advance!

Jerry Ma
  • 511
  • 4
  • 15
  • Either your paint is slow or your mouseMoveEvent generate a unneccessary amount of events. Or both. As long as we can't see the code we cannot help. – UmNyobe Feb 18 '15 at 08:04
  • 1
    I am suffering with the same problem...do you have any suggestions now?...Thank you... – Shao-Kui Jul 25 '18 at 13:25
  • @ShaoKui I has been quite a few years and I am not sure about the solution I ended up with. Sorry. – Jerry Ma Jul 26 '18 at 15:20

0 Answers0