Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-47588

QQuickWidget inside QDockWidget causes crash when docking/undocking

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P2: Important
    • 5.6.0 Beta
    • 5.5.0, 5.5.1, 5.6.0
    • Quick: Widget
    • None

    Description

      Seems it's a bug in QQuickWidget code (Only crash in Qt 5.5.0, work fine in Qt 5.4.x):

      The call stack is:

       	Qt5Guid.dll!QScopedPointer<QOpenGLFramebufferObjectPrivate,QScopedPointerDeleter<QOpenGLFramebufferObjectPrivate> >::data() Line 135	C++
       	Qt5Guid.dll!qGetPtrHelper<QScopedPointer<QOpenGLFramebufferObjectPrivate,QScopedPointerDeleter<QOpenGLFramebufferObjectPrivate> > >(const QScopedPointer<QOpenGLFramebufferObjectPrivate,QScopedPointerDeleter<QOpenGLFramebufferObjectPrivate> > & p) Line 983	C++
       	Qt5Guid.dll!QOpenGLFramebufferObject::d_func() Line 54	C++
       	Qt5Guid.dll!QOpenGLFramebufferObject::handle() Line 1330	C++
      >	Qt5QuickWidgetsd.dll!QQuickWidgetPrivate::render(bool needsSync) Line 210	C++
       	Qt5QuickWidgetsd.dll!QQuickWidget::showEvent(QShowEvent * __formal) Line 1076	C++
       	Qt5Widgetsd.dll!QWidget::event(QEvent * event) Line 8881	C++
       	Qt5QuickWidgetsd.dll!QQuickWidget::event(QEvent * e) Line 1170	C++
       	Qt5Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3717	C++
       	Qt5Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3682	C++
       	Qt5Cored.dll!000000006695ab44()	Unknown
       	Qt5Cored.dll!0000000066965183()	Unknown
       	Qt5Widgetsd.dll!QWidgetPrivate::show_helper() Line 7811	C++
       	Qt5Widgetsd.dll!QWidgetPrivate::show_recursive() Line 7681	C++
       	Qt5Widgetsd.dll!QWidgetPrivate::showChildren(bool spontaneous) Line 8177	C++
       	Qt5Widgetsd.dll!QWidgetPrivate::show_helper() Line 7760	C++
       	Qt5Widgetsd.dll!QWidget::setVisible(bool visible) Line 8097	C++
       	Qt5Widgetsd.dll!QWidget::show() Line 7658	C++
       	Qt5Widgetsd.dll!QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect & rect) Line 1048	C++
       	Qt5Widgetsd.dll!QDockWidgetPrivate::plug(const QRect & rect) Line 995	C++
       	Qt5Widgetsd.dll!QMainWindowLayout::animationFinished(QWidget * widget) Line 1608	C++
       	Qt5Widgetsd.dll!QWidgetAnimator::abort(QWidget * w) Line 64	C++
       	Qt5Widgetsd.dll!QWidgetAnimator::animationFinished() Line 71	C++
       	Qt5Widgetsd.dll!QWidgetAnimator::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Line 74	C++
      

      fbo member is NULL in render() method:

      void QQuickWidgetPrivate::render(bool needsSync)
      {
          if (!context->makeCurrent(offscreenSurface)) {
              qWarning("QQuickWidget: Cannot render due to failing makeCurrent()");
              return;
          }
      
          QOpenGLContextPrivate::get(context)->defaultFboRedirect = fbo->handle();   //<<----error here fbo is NULL
      
          if (needsSync) {
              renderControl->polishItems();
              renderControl->sync();
          }
      
          renderControl->render();
      
          if (resolvedFbo) {
              QRect rect(QPoint(0, 0), fbo->size());
              QOpenGLFramebufferObject::blitFramebuffer(resolvedFbo, rect, fbo, rect);
          }
      
          static_cast<QOpenGLExtensions *>(context->functions())->flushShared();
      
          QOpenGLContextPrivate::get(context)->defaultFboRedirect = 0;
      }
      

      Seems the related code was introduced by https://codereview.qt-project.org/#/c/113475/ .

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              lagocs Laszlo Agocs
              yinyunqiao Yunqiao Yin
              Votes:
              2 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes