On Tuesday 20 January 2004 8:13 pm, Roberto Alsina wrote: > Hello, > > Ok, this one is pretty hard to explain. I imagine understanding will be > harder still :-) > > First of all: this same code worked with PyQt 3.8 (I think that was the > version), but doesn't with 3.9 or 3.10 > > Here's the story. > > WI want to make a QTextBrowser show images. To do that, I created my own > QMimeSourceFactory which would download the stuff and return it on its > data() method. > > The data has to be returned as a QMimeObject. Or rather, as something > inheriting QMimeObject, like QTextDrag or QImageDrag. > > The problem is, somewhere things go wrong, and QMimeSource.provides is > called instead of QTextDrag's or QImageDrag's. Since that is pure virtual, > the app goes boom. Here's a backtrace:
QMimeSource.provides() isn't pure virtual and QTextDrag and QImageDrag don't reimplement it. I think it's format() that's the problem. I'm confused by the fact that no SIP generated classes (ie. with a sip prefix) seem to be involved. > #0 0x400ce671 in kill () from /lib/i686/libc.so.6 > #1 0x40039afd in pthread_kill () from /lib/i686/libpthread.so.0 > #2 0x40039e9b in raise () from /lib/i686/libpthread.so.0 > #3 0x400ce414 in raise () from /lib/i686/libc.so.6 > #4 0x400cf94b in abort () from /lib/i686/libc.so.6 > #5 0x40926b57 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.5 > #6 0x40926ba4 in std::terminate() () from /usr/lib/libstdc++.so.5 > #7 0x40927077 in __cxa_pure_virtual () from /usr/lib/libstdc++.so.5 > #8 0x40417e77 in QMimeSource::provides(char const*) const () from > /usr/lib/qt-3.2/lib/libqt-mt.so.3 > #9 0x403e3ace in QImageDrag::decode(QMimeSource const*, QImage&) () from > /usr/lib/qt-3.2/lib/libqt-mt.so.3 > #10 0x40477a3a in QTextImage::QTextImage(QTextDocument*, QMap<QString, > QString> const&, QString const&, QMimeSourceFactory&) () from > /usr/lib/qt-3.2/lib/libqt-mt.so.3 > #11 0x4043acad in QStyleSheet::tag(QString const&, QMap<QString, QString> > const&, QString const&, QMimeSourceFactory const&, bool, QTextDocument*) > const () from /usr/lib/qt-3.2/lib/libqt-mt.so.3 > #12 0x4045f822 in QTextDocument::setRichTextInternal(QString const&, > QTextCursor*) () > from /usr/lib/qt-3.2/lib/libqt-mt.so.3 > #13 0x4045c5df in QTextDocument::setRichText(QString const&, QString > const&) () from /usr/lib/qt-3.2/lib/libqt-mt.so.3 > #14 0x40461dfa in QTextDocument::setText(QString const&, QString const&) > () from /usr/lib/qt-3.2/lib/libqt-mt.so.3 > #15 0x4053626c in QTextEdit::setText(QString const&, QString const&) () > from /usr/lib/qt-3.2/lib/libqt-mt.so.3 > #16 0x4052ca2c in QTextBrowser::setText(QString const&, QString const&) () > from /usr/lib/qt-3.2/lib/libqt-mt.so.3 > #17 0x40e10134 in sipQTextBrowser::setText(QString const&, QString const&) > () > > It's not easy to provide a sample program that causes this (it's a part of > a larger one, and tangled), but: > > a) I can try, if it's necessary It would help. You might also try passing the -r flag to configure.py when building PyQt and using [lib]sip.settracemask() to trace where the code is switching between C++ land and Python land. What version of SIP are you using? Phil _______________________________________________ PyKDE mailing list [EMAIL PROTECTED] http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
