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

QListView infinite recursion

    XMLWordPrintable

Details

    • Bug
    • Resolution: Duplicate
    • P1: Critical
    • 4.8.0
    • 4.6.2, 4.7.1
    • Widgets: Itemviews
    • None
    • Windows 7, XP

    Description

      In a very specific scenario, when refiltering a model, I receive a stack overflow with the QListView. My basic setup is

      QListView -> QSortFilterProxyModel -> QStandardItemModel

      It appears that when I refilter with a specific string, the list view goes into infinite recursion layout out its children. This seems to happen when the scroll bars are turning on and off. This functionality seems to be happening in

      QAbstractScrollAreaPrivate::layoutChildren()

      In one call, the needh is true and needv is false. This triggers changing the size of viewport, which calls updateGeometries() and then layoutChildren(). The next call to layoutChildren() has needh to false and needv to true, which again triggers a resize of the viewport, and so on.

      hbarpolicy = Qt::ScrollBarAsNeeded
      vbarpolicy = Qt::ScrollBarAsNeeded

      I'm sorry I don't have a repro case. This appears to happen only with a specific filter string here and our current set of data. Turning uniformItemSizes to off fixes the problem here, as does changing the scrollbar policies to "always on". Feel free to contact me for any additional information. A portion of the stack trace is as follows:

      > QtGuid4.dll!QAbstractScrollAreaPrivate::layoutChildren() Line 479 C++
      QtGuid4.dll!QListView::updateGeometries() Line 1492 C++
      QtGuid4.dll!QAbstractItemView::resizeEvent(QResizeEvent * event=0x000954d0) Line 2339 C++
      QtGuid4.dll!QListView::resizeEvent(QResizeEvent * e=0x000954d0) Line 847 C++
      QtGuid4.dll!QWidget::event(QEvent * event=0x000954d0) Line 8153 C++
      QtGuid4.dll!QFrame::event(QEvent * e=0x000954d0) Line 557 + 0xc bytes C++
      QtGuid4.dll!QAbstractScrollArea::viewportEvent(QEvent * e=0x000954d0) Line 1036 + 0xc bytes C++
      QtGuid4.dll!QAbstractItemView::viewportEvent(QEvent * event=0x000954d0) Line 1611 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::viewportEvent(QEvent * event=0x000954d0) Line 100 + 0x28 bytes C++
      QtGuid4.dll!QAbstractScrollAreaFilter::eventFilter(QObject * o=0x06ca9120, QEvent * e=0x000954d0) Line 116 + 0x29 bytes C++
      QtCored4.dll!QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject * receiver=0x06ca9120, QEvent * event=0x000954d0) Line 819 + 0x15 bytes C++
      QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x06ca9120, QEvent * e=0x000954d0) Line 4296 + 0x11 bytes C++
      QtGuid4.dll!QApplication::notify(QObject * receiver=0x06ca9120, QEvent * e=0x000954d0) Line 4265 + 0x10 bytes C++
      QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x06ca9120, QEvent * event=0x000954d0) Line 704 + 0x15 bytes C++
      QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x06ca9120, QEvent * event=0x000954d0) Line 215 + 0x39 bytes C++
      QtGuid4.dll!QWidgetPrivate::setGeometry_sys(int x=2, int y=2, int w=426, int h=408, bool isMove=false) Line 1505 + 0x11 bytes C++
      QtGuid4.dll!QWidget::setGeometry(const QRect & r=

      {...}) Line 6636 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::layoutChildren() Line 479 C++
      QtGuid4.dll!QListView::updateGeometries() Line 1492 C++
      QtGuid4.dll!QAbstractItemView::resizeEvent(QResizeEvent * event=0x00096354) Line 2339 C++
      QtGuid4.dll!QListView::resizeEvent(QResizeEvent * e=0x00096354) Line 847 C++
      QtGuid4.dll!QWidget::event(QEvent * event=0x00096354) Line 8153 C++
      QtGuid4.dll!QFrame::event(QEvent * e=0x00096354) Line 557 + 0xc bytes C++
      QtGuid4.dll!QAbstractScrollArea::viewportEvent(QEvent * e=0x00096354) Line 1036 + 0xc bytes C++
      QtGuid4.dll!QAbstractItemView::viewportEvent(QEvent * event=0x00096354) Line 1611 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::viewportEvent(QEvent * event=0x00096354) Line 100 + 0x28 bytes C++
      QtGuid4.dll!QAbstractScrollAreaFilter::eventFilter(QObject * o=0x06ca9120, QEvent * e=0x00096354) Line 116 + 0x29 bytes C++
      QtCored4.dll!QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject * receiver=0x06ca9120, QEvent * event=0x00096354) Line 819 + 0x15 bytes C++
      QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x06ca9120, QEvent * e=0x00096354) Line 4296 + 0x11 bytes C++
      QtGuid4.dll!QApplication::notify(QObject * receiver=0x06ca9120, QEvent * e=0x00096354) Line 4265 + 0x10 bytes C++
      QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x06ca9120, QEvent * event=0x00096354) Line 704 + 0x15 bytes C++
      QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x06ca9120, QEvent * event=0x00096354) Line 215 + 0x39 bytes C++
      QtGuid4.dll!QWidgetPrivate::setGeometry_sys(int x=2, int y=2, int w=443, int h=391, bool isMove=false) Line 1505 + 0x11 bytes C++
      QtGuid4.dll!QWidget::setGeometry(const QRect & r={...}

      ) Line 6636 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::layoutChildren() Line 479 C++
      QtGuid4.dll!QListView::updateGeometries() Line 1492 C++
      QtGuid4.dll!QAbstractItemView::resizeEvent(QResizeEvent * event=0x000971d8) Line 2339 C++
      QtGuid4.dll!QListView::resizeEvent(QResizeEvent * e=0x000971d8) Line 847 C++
      QtGuid4.dll!QWidget::event(QEvent * event=0x000971d8) Line 8153 C++
      QtGuid4.dll!QFrame::event(QEvent * e=0x000971d8) Line 557 + 0xc bytes C++
      QtGuid4.dll!QAbstractScrollArea::viewportEvent(QEvent * e=0x000971d8) Line 1036 + 0xc bytes C++
      QtGuid4.dll!QAbstractItemView::viewportEvent(QEvent * event=0x000971d8) Line 1611 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::viewportEvent(QEvent * event=0x000971d8) Line 100 + 0x28 bytes C++
      QtGuid4.dll!QAbstractScrollAreaFilter::eventFilter(QObject * o=0x06ca9120, QEvent * e=0x000971d8) Line 116 + 0x29 bytes C++
      QtCored4.dll!QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject * receiver=0x06ca9120, QEvent * event=0x000971d8) Line 819 + 0x15 bytes C++
      QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x06ca9120, QEvent * e=0x000971d8) Line 4296 + 0x11 bytes C++
      QtGuid4.dll!QApplication::notify(QObject * receiver=0x06ca9120, QEvent * e=0x000971d8) Line 4265 + 0x10 bytes C++
      QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x06ca9120, QEvent * event=0x000971d8) Line 704 + 0x15 bytes C++
      QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x06ca9120, QEvent * event=0x000971d8) Line 215 + 0x39 bytes C++
      QtGuid4.dll!QWidgetPrivate::setGeometry_sys(int x=2, int y=2, int w=426, int h=408, bool isMove=false) Line 1505 + 0x11 bytes C++
      QtGuid4.dll!QWidget::setGeometry(const QRect & r=

      {...}) Line 6636 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::layoutChildren() Line 479 C++
      QtGuid4.dll!QListView::updateGeometries() Line 1492 C++
      QtGuid4.dll!QAbstractItemView::resizeEvent(QResizeEvent * event=0x0009805c) Line 2339 C++
      QtGuid4.dll!QListView::resizeEvent(QResizeEvent * e=0x0009805c) Line 847 C++
      QtGuid4.dll!QWidget::event(QEvent * event=0x0009805c) Line 8153 C++
      QtGuid4.dll!QFrame::event(QEvent * e=0x0009805c) Line 557 + 0xc bytes C++
      QtGuid4.dll!QAbstractScrollArea::viewportEvent(QEvent * e=0x0009805c) Line 1036 + 0xc bytes C++
      QtGuid4.dll!QAbstractItemView::viewportEvent(QEvent * event=0x0009805c) Line 1611 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::viewportEvent(QEvent * event=0x0009805c) Line 100 + 0x28 bytes C++
      QtGuid4.dll!QAbstractScrollAreaFilter::eventFilter(QObject * o=0x06ca9120, QEvent * e=0x0009805c) Line 116 + 0x29 bytes C++
      QtCored4.dll!QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject * receiver=0x06ca9120, QEvent * event=0x0009805c) Line 819 + 0x15 bytes C++
      QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x06ca9120, QEvent * e=0x0009805c) Line 4296 + 0x11 bytes C++
      QtGuid4.dll!QApplication::notify(QObject * receiver=0x06ca9120, QEvent * e=0x0009805c) Line 4265 + 0x10 bytes C++
      QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x06ca9120, QEvent * event=0x0009805c) Line 704 + 0x15 bytes C++
      QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x06ca9120, QEvent * event=0x0009805c) Line 215 + 0x39 bytes C++
      QtGuid4.dll!QWidgetPrivate::setGeometry_sys(int x=2, int y=2, int w=443, int h=391, bool isMove=false) Line 1505 + 0x11 bytes C++
      QtGuid4.dll!QWidget::setGeometry(const QRect & r={...}

      ) Line 6636 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::layoutChildren() Line 479 C++
      QtGuid4.dll!QListView::updateGeometries() Line 1492 C++
      QtGuid4.dll!QAbstractItemView::resizeEvent(QResizeEvent * event=0x00098ee0) Line 2339 C++
      QtGuid4.dll!QListView::resizeEvent(QResizeEvent * e=0x00098ee0) Line 847 C++
      QtGuid4.dll!QWidget::event(QEvent * event=0x00098ee0) Line 8153 C++
      QtGuid4.dll!QFrame::event(QEvent * e=0x00098ee0) Line 557 + 0xc bytes C++
      QtGuid4.dll!QAbstractScrollArea::viewportEvent(QEvent * e=0x00098ee0) Line 1036 + 0xc bytes C++
      QtGuid4.dll!QAbstractItemView::viewportEvent(QEvent * event=0x00098ee0) Line 1611 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::viewportEvent(QEvent * event=0x00098ee0) Line 100 + 0x28 bytes C++
      QtGuid4.dll!QAbstractScrollAreaFilter::eventFilter(QObject * o=0x06ca9120, QEvent * e=0x00098ee0) Line 116 + 0x29 bytes C++
      QtCored4.dll!QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject * receiver=0x06ca9120, QEvent * event=0x00098ee0) Line 819 + 0x15 bytes C++
      QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x06ca9120, QEvent * e=0x00098ee0) Line 4296 + 0x11 bytes C++
      QtGuid4.dll!QApplication::notify(QObject * receiver=0x06ca9120, QEvent * e=0x00098ee0) Line 4265 + 0x10 bytes C++
      QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x06ca9120, QEvent * event=0x00098ee0) Line 704 + 0x15 bytes C++
      QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x06ca9120, QEvent * event=0x00098ee0) Line 215 + 0x39 bytes C++
      QtGuid4.dll!QWidgetPrivate::setGeometry_sys(int x=2, int y=2, int w=426, int h=408, bool isMove=false) Line 1505 + 0x11 bytes C++
      QtGuid4.dll!QWidget::setGeometry(const QRect & r=

      {...}) Line 6636 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::layoutChildren() Line 479 C++
      QtGuid4.dll!QListView::updateGeometries() Line 1492 C++
      QtGuid4.dll!QAbstractItemView::resizeEvent(QResizeEvent * event=0x00099d64) Line 2339 C++
      QtGuid4.dll!QListView::resizeEvent(QResizeEvent * e=0x00099d64) Line 847 C++
      QtGuid4.dll!QWidget::event(QEvent * event=0x00099d64) Line 8153 C++
      QtGuid4.dll!QFrame::event(QEvent * e=0x00099d64) Line 557 + 0xc bytes C++
      QtGuid4.dll!QAbstractScrollArea::viewportEvent(QEvent * e=0x00099d64) Line 1036 + 0xc bytes C++
      QtGuid4.dll!QAbstractItemView::viewportEvent(QEvent * event=0x00099d64) Line 1611 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::viewportEvent(QEvent * event=0x00099d64) Line 100 + 0x28 bytes C++
      QtGuid4.dll!QAbstractScrollAreaFilter::eventFilter(QObject * o=0x06ca9120, QEvent * e=0x00099d64) Line 116 + 0x29 bytes C++
      QtCored4.dll!QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject * receiver=0x06ca9120, QEvent * event=0x00099d64) Line 819 + 0x15 bytes C++
      QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x06ca9120, QEvent * e=0x00099d64) Line 4296 + 0x11 bytes C++
      QtGuid4.dll!QApplication::notify(QObject * receiver=0x06ca9120, QEvent * e=0x00099d64) Line 4265 + 0x10 bytes C++
      QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x06ca9120, QEvent * event=0x00099d64) Line 704 + 0x15 bytes C++
      QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x06ca9120, QEvent * event=0x00099d64) Line 215 + 0x39 bytes C++
      QtGuid4.dll!QWidgetPrivate::setGeometry_sys(int x=2, int y=2, int w=443, int h=391, bool isMove=false) Line 1505 + 0x11 bytes C++
      QtGuid4.dll!QWidget::setGeometry(const QRect & r={...}

      ) Line 6636 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::layoutChildren() Line 479 C++
      QtGuid4.dll!QListView::updateGeometries() Line 1492 C++
      QtGuid4.dll!QAbstractItemView::resizeEvent(QResizeEvent * event=0x0009abe8) Line 2339 C++
      QtGuid4.dll!QListView::resizeEvent(QResizeEvent * e=0x0009abe8) Line 847 C++
      QtGuid4.dll!QWidget::event(QEvent * event=0x0009abe8) Line 8153 C++
      QtGuid4.dll!QFrame::event(QEvent * e=0x0009abe8) Line 557 + 0xc bytes C++
      QtGuid4.dll!QAbstractScrollArea::viewportEvent(QEvent * e=0x0009abe8) Line 1036 + 0xc bytes C++
      QtGuid4.dll!QAbstractItemView::viewportEvent(QEvent * event=0x0009abe8) Line 1611 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::viewportEvent(QEvent * event=0x0009abe8) Line 100 + 0x28 bytes C++
      QtGuid4.dll!QAbstractScrollAreaFilter::eventFilter(QObject * o=0x06ca9120, QEvent * e=0x0009abe8) Line 116 + 0x29 bytes C++
      QtCored4.dll!QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject * receiver=0x06ca9120, QEvent * event=0x0009abe8) Line 819 + 0x15 bytes C++
      QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x06ca9120, QEvent * e=0x0009abe8) Line 4296 + 0x11 bytes C++
      QtGuid4.dll!QApplication::notify(QObject * receiver=0x06ca9120, QEvent * e=0x0009abe8) Line 4265 + 0x10 bytes C++
      QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x06ca9120, QEvent * event=0x0009abe8) Line 704 + 0x15 bytes C++
      QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x06ca9120, QEvent * event=0x0009abe8) Line 215 + 0x39 bytes C++
      QtGuid4.dll!QWidgetPrivate::setGeometry_sys(int x=2, int y=2, int w=426, int h=408, bool isMove=false) Line 1505 + 0x11 bytes C++
      QtGuid4.dll!QWidget::setGeometry(const QRect & r=

      {...}) Line 6636 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::layoutChildren() Line 479 C++
      QtGuid4.dll!QListView::updateGeometries() Line 1492 C++
      QtGuid4.dll!QAbstractItemView::resizeEvent(QResizeEvent * event=0x0009ba6c) Line 2339 C++
      QtGuid4.dll!QListView::resizeEvent(QResizeEvent * e=0x0009ba6c) Line 847 C++
      QtGuid4.dll!QWidget::event(QEvent * event=0x0009ba6c) Line 8153 C++
      QtGuid4.dll!QFrame::event(QEvent * e=0x0009ba6c) Line 557 + 0xc bytes C++
      QtGuid4.dll!QAbstractScrollArea::viewportEvent(QEvent * e=0x0009ba6c) Line 1036 + 0xc bytes C++
      QtGuid4.dll!QAbstractItemView::viewportEvent(QEvent * event=0x0009ba6c) Line 1611 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::viewportEvent(QEvent * event=0x0009ba6c) Line 100 + 0x28 bytes C++
      QtGuid4.dll!QAbstractScrollAreaFilter::eventFilter(QObject * o=0x06ca9120, QEvent * e=0x0009ba6c) Line 116 + 0x29 bytes C++
      QtCored4.dll!QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject * receiver=0x06ca9120, QEvent * event=0x0009ba6c) Line 819 + 0x15 bytes C++
      QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x06ca9120, QEvent * e=0x0009ba6c) Line 4296 + 0x11 bytes C++
      QtGuid4.dll!QApplication::notify(QObject * receiver=0x06ca9120, QEvent * e=0x0009ba6c) Line 4265 + 0x10 bytes C++
      QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x06ca9120, QEvent * event=0x0009ba6c) Line 704 + 0x15 bytes C++
      QtCored4.dll!QCoreApplication::sendEvent(QObject * receiver=0x06ca9120, QEvent * event=0x0009ba6c) Line 215 + 0x39 bytes C++
      QtGuid4.dll!QWidgetPrivate::setGeometry_sys(int x=2, int y=2, int w=443, int h=391, bool isMove=false) Line 1505 + 0x11 bytes C++
      QtGuid4.dll!QWidget::setGeometry(const QRect & r={...}

      ) Line 6636 C++
      QtGuid4.dll!QAbstractScrollAreaPrivate::layoutChildren() Line 479 C++
      QtGuid4.dll!QListView::updateGeometries() Line 1492 C++

      Attachments

        1. main.cpp
          1 kB
        2. patch_workaround.diff
          0.5 kB

        Issue Links

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

          Activity

            People

              smd Jan Arve
              courtland Courtland Idstrom
              Votes:
              4 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes