On 04/03/2013 03:24 PM, Andreas Pakulat wrote:
first of all, QTimer gives you no guarantee that it'll fire exactly after the given amount of time. In particular not with such small timeouts and when having non-trivial paint functions like yours. QTimer is bound to the event loop, hence cannot fire if the loop is being blocked by something. If you simplify the paint function the effect will be much less dramatic.
Yes, I know that QTimer is not a high-precision timer. This is also not a problem in my example, since I can live with a bit of jitter.
That being said, here with Qt4.8 even a full-screen window will not cause a significant slowdown, except during the resize phase. Once the resize is done the timer fires every 25 ms again. So I guess the calculation inside the paint function simply take some time and once the widget doesn't resize anymore the paint function is not called anymore.
OK, but (1) I was not referring to the resize phase, and (2) this only works well on Windows. On Mac OS X and Linux, the timer depends on the size of the window being updated -- for a full screen window, the timer fires every 100ms (not during the resize) because QGraphicsView cannot handle the computations within a time frame less than 100ms anymore.
If you need high precision timers then you'll need to write platform-specific code. QTimer is not meant for that. Why this works better on Windows with Py(Qt/Side) can have many reasons, the whole graphicsstack is different there, the QTimer might be implemented differently there. Maybe windows delays the painting during resize somewhat more so that there are less repaint-events given to Qt or maybe the functions used in your paint() are more optimized on Windows.
Well, the fact that it does work equally well on all three platforms when I use Qt directly from a C++ program indicates that this is an issue with the Python wrapper, and not a different implementation within the Qt framework. Furthermore, since PyQt and PySide produce a Python wrapper that does work just like its C++ counterpart under Windows makes me think that it must be an implementation detail of PyQt/PySide that could probably be fixed.
Clemens _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt