Re: Resize flicking on QMainWindow centralWidget in python but not C++
Patrick Stinson <[email protected]>
| Newsgroups | gmane.comp.python.pyqt-pykde |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> 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 <[email protected]> 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 <[email protected]> wrote: >>> >>> Your Python class inherits from QOpenGLWidget. Your C++ class inherits from QWidget. >>> >>>> On Oct 5, 2019, at 2:10 PM, Patrick Stinson <[email protected]> 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 [email protected] >>>> https://www.riverbankcomputing.com/mailman/listinfo/pyqt >>> >> > _______________________________________________ PyQt mailing list [email protected] https://www.riverbankcomputing.com/mailman/listinfo/pyqt