Hmmm... the ScrollAreas ::paintEvent() opens the painter on it's viewprt ::widget(), but i don't grep special Qt::WA_WState_InPaintEvent handling for QAbstractScrollArea (or any gui/widgets) - sure that's legal? I mean, shouldn't the paint code be reimplemented in the actual viewport widget then? (i.e. in viewportEvent what oddly seems to be KHTMLView::widgetEvent(QEvent* e)) In doubt you could just un/set the Attribute around the painting, but afaik that's no very good idea... Thomas Am Monday 18 January 2010 schrieb Thiago Macieira: > Em Segunda-feira 18. Janeiro 2010, às 20.50.12, Jaime Torres escreveu: > > I have much more info now. > > > > I've modified Qt4.6.1 (yes, installed in /usr/lib/qt4.5) to include a > > kbactrace after every qwarning in QPaint, and here you are why it > > happens. But I get lost and can not fix it. > > > > > > QPainter::begin: Widget painting can only begin as a result of a > > paintEvent [ > > 0: /usr/lib/qt4.5/lib/libQtGui.so.4 [0x7fe439a965d8] > > 1: > > /usr/lib/qt4.5/lib/libQtGui.so.4(_ZN8QPainter5beginEP12QPaintDevice+0x5ea > >) [0x7fe439a9ba9a] 2: > > /usr/lib/qt4.5/lib/libQtGui.so.4(_ZN8QPainterC1EP12QPaintDevice+0x146) > > [0x7fe439a9c206] 3: > > /opt/kde4/lib/libkhtml.so.5(_ZN9KHTMLView10paintEventEP11QPaintEvent+0x39 > >) [0x7fe429d4fd99] 4: > > /opt/kde4/lib/libkhtml.so.5(_ZN9KHTMLView13viewportEventEP6QEvent+0xfa) > > [0x7fe429d4841a] 5: > > /usr/lib/qt4.5/lib/libQtCore.so.4(_ZN23QCoreApplicationPrivate29sendThrou > >g hObjectEventFiltersEP7QObjectP6QEvent+0xc0) [0x7fe43af16900] 6: > > Here's the same as a backtrace in gdb. To reproduce: > > QT_FATAL_WARNINGS=1 konqueror http://qt.nokia.com > > As you can see from the backtrace, KHTMLView::viewportEvent creates a > QPaintEvent and calls paintEvent. That's what causes the issue. > > However, given the documentation for QAbstractScrollArea::viewportEvent as > well as the implementation in Qt, it would seem that paint events are > allowed. > > This is where I get lost > > #9 0xb6dbc837 in qt_message_output (msgType=QtWarningMsg, buf=0x977ae98 > "QPainter::begin: Widget painting can only begin as a result of a > paintEvent") at > /home/thiago/src/troll/qt-4.6/src/corelib/global/qglobal.cpp:2227 #10 > 0xb6dbc9f9 in qt_message (msgType=QtWarningMsg, msg=0xb6a6aeac > "QPainter::begin: Widget painting can only begin as a result of a > paintEvent", ap=0xbf8eda74 "��\216�") > at /home/thiago/src/troll/qt-4.6/src/corelib/global/qglobal.cpp:2273 > #11 0xb6dbca81 in qWarning (msg=0xb6a6aeac "QPainter::begin: Widget > painting can only begin as a result of a paintEvent") at > /home/thiago/src/troll/qt-4.6/src/corelib/global/qglobal.cpp:2355 > #12 0xb63d6aa4 in QPainter::begin (this=0xbf8edc54, pd=0x94594b8) at > /home/thiago/src/troll/qt-4.6/src/gui/painting/qpainter.cpp:1799 > #13 0xb63d583f in QPainter (this=0xbf8edc54, pd=0x94594b8) at > /home/thiago/src/troll/qt-4.6/src/gui/painting/qpainter.cpp:1480 > #14 0xb335c6a5 in KHTMLView::paintEvent (this=0x94688e0, e=0xbf8edcfc) at > /home/tmacieir/src/kde4/KDE/kdelibs/khtml/khtmlview.cpp:878 > #15 0xb33639cc in KHTMLView::viewportEvent (this=0x94688e0, e=0xbf8ee2a8) > at /home/tmacieir/src/kde4/KDE/kdelibs/khtml/khtmlview.cpp:2129 > #16 0xb67e073b in QAbstractScrollAreaPrivate::viewportEvent > (this=0x9468ea8, event=0xbf8ee2a8) at > /home/thiago/src/troll/qt-4.6/src/gui/widgets/qabstractscrollarea_p.h:100 > #17 0xb67e0822 in QAbstractScrollAreaFilter::eventFilter (this=0x94584a0, > o=0x8ebd098, e=0xbf8ee2a8) at > /home/thiago/src/troll/qt-4.6/src/gui/widgets/qabstractscrollarea_p.h:116 > #18 0xb6edea1f in QCoreApplicationPrivate::sendThroughObjectEventFilters > (this=0x8aa98b0, receiver=0x8ebd098, event=0xbf8ee2a8) > at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qcoreapplication.cpp:819 > #19 0xb6245c8e in QApplicationPrivate::notify_helper (this=0x8aa98b0, > receiver=0x8ebd098, e=0xbf8ee2a8) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qapplication.cpp:4294 > #20 0xb6245b17 in QApplication::notify (this=0xbf8f0b5c, > receiver=0x8ebd098, e=0xbf8ee2a8) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qapplication.cpp:4263 > #21 0xb7521497 in KApplication::notify (this=0xbf8f0b5c, > receiver=0x8ebd098, event=0xbf8ee2a8) at > /home/tmacieir/src/kde4/KDE/kdelibs/kdeui/kernel/kapplication.cpp:302 > #22 0xb6ede741 in QCoreApplication::notifyInternal (this=0xbf8f0b5c, > receiver=0x8ebd098, event=0xbf8ee2a8) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qcoreapplication.cpp:704 > #23 0xb6248475 in QCoreApplication::sendSpontaneousEvent > (receiver=0x8ebd098, event=0xbf8ee2a8) at > ../../include/QtCore/../../../../../src/troll/qt-4.6/src/corelib/kernel/qco > reapplication.h:218 #24 0xb62aa437 in QWidgetPrivate::drawWidget > (this=0x9421e98, pdev=0x8f8a7d4, rgn=@0xbf8ee408, offset=@0xbf8ee454, > flags=4, sharedPainter=0x0, > backingStore=0x8f8a818) > at /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5322 > #25 0xb62aace1 in QWidgetPrivate::paintSiblingsRecursive (this=0x9468ea8, > pdev=0x8f8a7d4, siblings=@0x9468eb4, index=0, rgn=@0xbf8ee628, > offset=@0xbf8ee674, flags=4, sharedPainter=0x0, > backingStore=0x8f8a818) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5435 > #26 0xb62aa8a1 in QWidgetPrivate::drawWidget (this=0x9468ea8, > pdev=0x8f8a7d4, rgn=@0xbf8ee628, offset=@0xbf8ee674, flags=4, > sharedPainter=0x0, > backingStore=0x8f8a818) > at /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5371 > #27 0xb62aace1 in QWidgetPrivate::paintSiblingsRecursive (this=0x946c7e0, > pdev=0x8f8a7d4, siblings=@0x946c7ec, index=2, rgn=@0xbf8ee848, > offset=@0xbf8ee894, flags=4, sharedPainter=0x0, > backingStore=0x8f8a818) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5435 > #28 0xb62aa8a1 in QWidgetPrivate::drawWidget (this=0x946c7e0, > pdev=0x8f8a7d4, rgn=@0xbf8ee848, offset=@0xbf8ee894, flags=4, > sharedPainter=0x0, > backingStore=0x8f8a818) > at /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5371 > #29 0xb62aace1 in QWidgetPrivate::paintSiblingsRecursive (this=0x8ec42d8, > pdev=0x8f8a7d4, siblings=@0x8ec42e4, index=0, rgn=@0xbf8eea68, > offset=@0xbf8eeab4, flags=4, sharedPainter=0x0, > backingStore=0x8f8a818) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5435 > #30 0xb62aa8a1 in QWidgetPrivate::drawWidget (this=0x8ec42d8, > pdev=0x8f8a7d4, rgn=@0xbf8eea68, offset=@0xbf8eeab4, flags=4, > sharedPainter=0x0, > backingStore=0x8f8a818) > at /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5371 > #31 0xb62aace1 in QWidgetPrivate::paintSiblingsRecursive (this=0x8ebd7e8, > pdev=0x8f8a7d4, siblings=@0x8ebd7f4, index=0, rgn=@0xbf8eec88, > offset=@0xbf8eecd4, flags=4, sharedPainter=0x0, > backingStore=0x8f8a818) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5435 > #32 0xb62aa8a1 in QWidgetPrivate::drawWidget (this=0x8ebd7e8, > pdev=0x8f8a7d4, rgn=@0xbf8eec88, offset=@0xbf8eecd4, flags=4, > sharedPainter=0x0, > backingStore=0x8f8a818) > at /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5371 > #33 0xb62aace1 in QWidgetPrivate::paintSiblingsRecursive (this=0x8ec20b0, > pdev=0x8f8a7d4, siblings=@0x8ec20bc, index=0, rgn=@0xbf8eeea8, > offset=@0xbf8eeef4, flags=4, sharedPainter=0x0, > backingStore=0x8f8a818) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5435 > #34 0xb62aa8a1 in QWidgetPrivate::drawWidget (this=0x8ec20b0, > pdev=0x8f8a7d4, rgn=@0xbf8eeea8, offset=@0xbf8eeef4, flags=4, > sharedPainter=0x0, > backingStore=0x8f8a818) > at /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5371 > #35 0xb62aace1 in QWidgetPrivate::paintSiblingsRecursive (this=0x8b90b10, > pdev=0x8f8a7d4, siblings=@0x8b90b1c, index=48, rgn=@0xbf8ef168, > offset=@0x8f8a83c, flags=4, sharedPainter=0x0, > backingStore=0x8f8a818) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5435 > #36 0xb62aa8a1 in QWidgetPrivate::drawWidget (this=0x8b90b10, > pdev=0x8f8a7d4, rgn=@0xbf8ef168, offset=@0x8f8a83c, flags=5, > sharedPainter=0x0, > backingStore=0x8f8a818) > at /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:5371 > #37 0xb64b882c in QWidgetBackingStore::sync (this=0x8f8a818) at > /home/thiago/src/troll/qt-4.6/src/gui/painting/qbackingstore.cpp:1291 > #38 0xb62a108e in QWidgetPrivate::syncBackingStore (this=0x8b90b10) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:1663 > #39 0xb62b208c in QWidget::event (this=0x8b90920, event=0xbf8efab4) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:8272 > #40 0xb67553fa in QMainWindow::event (this=0x8b90920, event=0xbf8efab4) at > /home/thiago/src/troll/qt-4.6/src/gui/widgets/qmainwindow.cpp:1435 > #41 0xb761664c in KMainWindow::event (this=0x8b90920, ev=0xbf8efab4) at > /home/tmacieir/src/kde4/KDE/kdelibs/kdeui/widgets/kmainwindow.cpp:1103 > #42 0xb7659468 in KXmlGuiWindow::event (this=0x8b90920, ev=0xbf8efab4) at > /home/tmacieir/src/kde4/KDE/kdelibs/kdeui/xmlgui/kxmlguiwindow.cpp:131 > #43 0xb7ef0060 in KonqMainWindow::event (this=0x8b90920, e=0xbf8efab4) at > /home/tmacieir/src/kde4/KDE/kdebase/apps/konqueror/src/konqmainwindow.cpp:5 > 639 #44 0xb6245cb2 in QApplicationPrivate::notify_helper (this=0x8aa98b0, > receiver=0x8b90920, e=0xbf8efab4) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qapplication.cpp:4298 > #45 0xb6245b17 in QApplication::notify (this=0xbf8f0b5c, > receiver=0x8b90920, e=0xbf8efab4) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qapplication.cpp:4263 > #46 0xb7521497 in KApplication::notify (this=0xbf8f0b5c, > receiver=0x8b90920, event=0xbf8efab4) at > /home/tmacieir/src/kde4/KDE/kdelibs/kdeui/kernel/kapplication.cpp:302 > #47 0xb6ede741 in QCoreApplication::notifyInternal (this=0xbf8f0b5c, > receiver=0x8b90920, event=0xbf8efab4) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qcoreapplication.cpp:704 > #48 0xb6ee2219 in QCoreApplication::sendEvent (receiver=0x8b90920, > event=0xbf8efab4) at > ../../include/QtCore/../../../../../src/troll/qt-4.6/src/corelib/kernel/qco > reapplication.h:215 #49 0xb64b51e7 in sendUpdateRequest (widget=0x8b90920, > updateImmediately=true) at > /home/thiago/src/troll/qt-4.6/src/gui/painting/qbackingstore.cpp:503 #50 > 0xb64b5cbb in QWidgetBackingStore::markDirty (this=0x8f8a818, > rect=@0xbf8efbd0, widget=0x94594b0, updateImmediately=true, > invalidateBuffer=false) > at /home/thiago/src/troll/qt-4.6/src/gui/painting/qbackingstore.cpp:641 > #51 0xb62b4c3b in QWidget::repaint (this=0x94594b0, rect=@0xbf8efbd0) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:10015 > #52 0xb62b4b0d in QWidget::repaint (this=0x94594b0, x=0, y=0, w=1244, > h=649) at /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:9992 > #53 0xb335c241 in KHTMLView::repaintContents (this=0x94688e0, x=0, y=0, > w=1244, h=649) at > /home/tmacieir/src/kde4/KDE/kdelibs/khtml/khtmlview.cpp:805 #54 0xb335c2b2 > in KHTMLView::repaintContents (this=0x94688e0, r=@0xbf8efccc) at > /home/tmacieir/src/kde4/KDE/kdelibs/khtml/khtmlview.cpp:810 > #55 0xb336f0d5 in KHTMLView::timerEvent (this=0x94688e0, e=0xbf8f0694) at > /home/tmacieir/src/kde4/KDE/kdelibs/khtml/khtmlview.cpp:4210 > #56 0xb6ef5e26 in QObject::event (this=0x94688e0, e=0xbf8f0694) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qobject.cpp:1204 > #57 0xb62b27b2 in QWidget::event (this=0x94688e0, event=0xbf8f0694) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qwidget.cpp:8436 > #58 0xb673214c in QFrame::event (this=0x94688e0, e=0xbf8f0694) at > /home/thiago/src/troll/qt-4.6/src/gui/widgets/qframe.cpp:557 > #59 0xb67dfac2 in QAbstractScrollArea::event (this=0x94688e0, e=0xbf8f0694) > at > /home/thiago/src/troll/qt-4.6/src/gui/widgets/qabstractscrollarea.cpp:989 > #60 0xb67e4e5f in QScrollArea::event (this=0x94688e0, e=0xbf8f0694) at > /home/thiago/src/troll/qt-4.6/src/gui/widgets/qscrollarea.cpp:314 > #61 0xb335ac61 in KHTMLView::event (this=0x94688e0, e=0xbf8f0694) at > /home/tmacieir/src/kde4/KDE/kdelibs/khtml/khtmlview.cpp:546 > #62 0xb6245cb2 in QApplicationPrivate::notify_helper (this=0x8aa98b0, > receiver=0x94688e0, e=0xbf8f0694) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qapplication.cpp:4298 > #63 0xb6245b17 in QApplication::notify (this=0xbf8f0b5c, > receiver=0x94688e0, e=0xbf8f0694) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qapplication.cpp:4263 > #64 0xb7521497 in KApplication::notify (this=0xbf8f0b5c, > receiver=0x94688e0, event=0xbf8f0694) at > /home/tmacieir/src/kde4/KDE/kdelibs/kdeui/kernel/kapplication.cpp:302 > #65 0xb6ede741 in QCoreApplication::notifyInternal (this=0xbf8f0b5c, > receiver=0x94688e0, event=0xbf8f0694) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qcoreapplication.cpp:704 > #66 0xb6ee2219 in QCoreApplication::sendEvent (receiver=0x94688e0, > event=0xbf8f0694) at > ../../include/QtCore/../../../../../src/troll/qt-4.6/src/corelib/kernel/qco > reapplication.h:215 #67 0xb6f1908a in QTimerInfoList::activateTimers > (this=0x8aac6a4) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qeventdispatcher_unix.cpp > :603 #68 0xb6f14f70 in timerSourceDispatch (source=0x8aac670) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qeventdispatcher_glib.cpp: > 184 #69 0xb6f15029 in idleTimerSourceDispatch (source=0x8aacb00) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qeventdispatcher_glib.cpp: > 231 #70 0xb5b1db92 in g_main_context_dispatch () from > /usr/lib/libglib-2.0.so.0 #71 0xb5b21468 in ?? () from > /usr/lib/libglib-2.0.so.0 > #72 0xb5b2158e in g_main_context_iteration () from > /usr/lib/libglib-2.0.so.0 #73 0xb6f1611c in > QEventDispatcherGlib::processEvents (this=0x8aa9870, flags={i = 36}) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qeventdispatcher_glib.cpp: > 412 #74 0xb631ac46 in QGuiEventDispatcherGlib::processEvents > (this=0x8aa9870, flags={i = 36}) at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qguieventdispatcher_glib.cpp:2 > 04 #75 0xb6edbb1b in QEventLoop::processEvents (this=0xbf8f095c, flags={i = > 36}) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qeventloop.cpp:149 #76 > 0xb6edbc60 in QEventLoop::exec (this=0xbf8f095c, flags={i = 0}) at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qeventloop.cpp:201 #77 > 0xb6edee1d in QCoreApplication::exec () at > /home/thiago/src/troll/qt-4.6/src/corelib/kernel/qcoreapplication.cpp:981 > #78 0xb6243002 in QApplication::exec () at > /home/thiago/src/troll/qt-4.6/src/gui/kernel/qapplication.cpp:3577 > #79 0xb7f3fd33 in kdemain (argc=1, argv=0xbf8f0e84) at > /home/tmacieir/src/kde4/KDE/kdebase/apps/konqueror/src/konqmain.cpp:257 > #80 0x080485db in main (argc=1, argv=0xbf8f0e84) at > /home/tmacieir/obj/kde4/KDE/kdebase/apps/konqueror/src/konqueror_dummy.cpp: > 3 >