[PyQt] Resize flicking on QMainWindow centralWidget in python but not C++

Patrick Stinson patrickkidd at gmail.com
Sun Oct 6 21:38:15 BST 2019


I wonder if maybe the use of QQuickWidget child widgets enables some kind of OpenGL buffer in the QMainWindoe?

> On Oct 6, 2019, at 12:25 AM, Patrick Stinson <patrickkidd at gmail.com> wrote:
> 
> I put a qDebug() line in QMainWindow() and QOpenGLWidget(), rebuilt/installed Qt, and ran my app. I saw the line for the QMainWindow() but not QOpenGLWidget(), so that means QOpenGLWidget isn’t being run in my app. But I am still seeing the problem. Difficult to pinpoint as a reproducible report.
> 
>> On Oct 5, 2019, at 10:25 PM, Patrick Stinson <patrickkidd at gmail.com> wrote:
>> 
>> So it does, and changing that makes it work like the C++ example.
>> 
>> My own app is still showing the problem even without using QOpenGLWidget. I wonder if there is some setting somewhere that implicitly uses QOpenGLWidget….
>> 
>>> On Oct 5, 2019, at 5:36 PM, Eric Pettersen <pett at cgl.ucsf.edu> wrote:
>>> 
>>> Your Python class inherits from QOpenGLWidget.  Your C++ class inherits from QWidget.
>>> 
>>>> On Oct 5, 2019, at 2:10 PM, Patrick Stinson <patrickkidd at gmail.com> wrote:
>>>> 
>>>> Hello,
>>>> 
>>>> On MacOS, a QMainWindow with a simple painted centralWidget flickers when resizing quickly in python but not in C++. This only occurs with QMainWindow It is particularly pronounced more complex widgets, as shown in the following video:
>>>> 
>>>> https://youtu.be/0Qjy2wm6m9M
>>>> 
>>>> Here is the python example that shows the bug. Just run, rapidly resize the height of the widget , and observe a black flickering on the top edge of the widget as the height changes.
>>>> 
>>>> class Widget(QOpenGLWidget):
>>>>     def paintEvent(self, e):
>>>>         p = QPainter(self)
>>>>         p.setBrush(Qt.red)
>>>>         p.drawRect(self.rect())
>>>> 
>>>> app = QApplication(sys.argv)
>>>> mw = QMainWindow()
>>>> w = Widget()
>>>> mw.setCentralWidget(w)
>>>> mw.show()
>>>> w.show()
>>>> app.exec()
>>>> 
>>>> 
>>>> The following 1-to-1 C++ translation shows no such behavior:
>>>> 
>>>> 
>>>> #include <QApplication>
>>>> #include <QMainWindow>
>>>> #include <QWidget>
>>>> #include <QPainter>
>>>> 
>>>> class Widget : public QWidget {
>>>> public:
>>>>     void paintEvent(QPaintEvent *) {
>>>>         QPainter p(this);
>>>>         p.setBrush(Qt::red);
>>>>         p.drawRect(rect());
>>>>     }
>>>> };
>>>> 
>>>> int main(int argc, char *argv[])
>>>> {
>>>>     QApplication a(argc, argv);
>>>>     QMainWindow mw;
>>>>     QWidget *w = new Widget;
>>>>     mw.setCentralWidget(w);
>>>>     mw.show();
>>>>     return a.exec();
>>>> }
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> PyQt mailing list    PyQt at riverbankcomputing.com
>>>> https://www.riverbankcomputing.com/mailman/listinfo/pyqt
>>> 
>> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20191006/d6c162ed/attachment.html>


More information about the PyQt mailing list