[vtkusers] Dealing with QTBUG-40889
clinton at elemtech.com
clinton at elemtech.com
Fri Jul 1 18:08:19 EDT 2016
----- On Jul 1, 2016, at 7:07 AM, Elvis Stansvik <elvis.stansvik at orexplore.com> wrote:
> I'm in the unfortunate situation of having to support Qt 5.5.1, and I'm hit by
> which was fixed in 5.6 with
> I've been trying to find a way to work around this bug using a combination of
> native and non-native event filters in Qt, but haven't really found a good
> The problem is I want to use the built-in interactor styles in VTK, such as
> vtkInteractorStyleTrackballCamera, and these makes calls to Render() as fast as
> the mouse events arrive.
> I have to ask: Is this really a good idea, shoudn't the rendering be governed by
> a timer during the interaction (say dolly), to be more robust against a flood
> of mouse events? The reason Qt has even buffered events (and hence opened up
> for compression, barring that bug) is that the main thread is overworked. And
> this is due to VTK rendering at every mouse move event.
> If I make my own completely custom interactor style, I of course have full
> control and can let a timer govern the rendering, but I was hoping to leverage
> the built-in ones. And it's not possible to subclass them and disable just the
> Render calls unfortunately.
> At the moment I don't quite know what to do. Moving the camera around in a VTK
> window is like syrup, and our product is to run using the Qt 5.5.1 that is
> packaged in *buntu Xenial :(
> Thanks for any advice, especially if you've worked around this problem yourself
I think this problem is related to not following the Qt recommended way of doing rendering with mouse events.
What Qt 5.5 would like to do is give you 2 or maybe 3 mouse events per render.
To do that with VTK, you can implement a render callback for the interactor, which calls QVTKWidget::update(), then overload QVTKWidget::paintEvent() to call vtkRenderWindow::Render() instead of vtkRenderWindowInteractor::Render().
This is what I have done to gain back the responsiveness.
I've had thoughts in the past about proposing a vtkRenderWindowInteractor::RequestRender() function which the interactor style classes can use, which might help solve this problem. But then with Qt 5.6, the problem goes away.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the vtkusers