> 
> The call to mimeSourceFactory().data() is what is failing inside the
> second setSource(), and this failing is caused by the first setSource().
> 
> Looking at the comments in the Qt documentation for
> QMimeSourceFactory::data() I'd guess that this is just the way it works
> and not a PyQt problem.
> 
> Phil

Hmm, I don't quite agree but I could easily be misunderstanding.  The
mimeSourceFactory() should be providing a partial map between "href"'s
and the source.  Here is the same example, but shortened.  Looking at
the qt code, I don't see why doing a "setSource()" should change what
"data()" returns.  Even looking at QMimeSourceFactoryData it seems
that the "last" member data keeps leaks from happening.

Output from the script:
1:  <qt.QMimeSource instance at 1716b8>
2:  <qt.QMimeSource instance at 171700>
3:  None

Here is the code in qt/src/widgets/qtextbrowser.cpp:QTextBrowser::setSource()

    if ( !source.isEmpty() && url != d->curmain ) {
        const QMimeSource* m =
                    mimeSourceFactory()->data( source, context() );
        QString txt;
        if ( !m ){
            qWarning("QTextBrowser: no mimesource for %s", source.latin1() );
        }
        else {
            if ( !QTextDrag::decode( m, txt ) ) {
                qWarning("QTextBrowser: cannot decode %s", source.latin1() );
            }
        }

--pete (mystified)

#! /usr/bin/env python
import qt
import sys
 
app = qt.QApplication (sys.argv)
main = qt.QMainWindow ()
 
text = qt.QTextBrowser (main)
 
name1 = qt.QString ('help-start.html')
text1 = qt.QString ('<b>this is a test</b>')
 
text.mimeSourceFactory().setText (name1, text1)
 
print '1: ', text.mimeSourceFactory().data(name1, text.context())
print '2: ', text.mimeSourceFactory().data(name1, text.context())

text.setSource (name1)
# No longer get any data back!
print '3: ', text.mimeSourceFactory().data(name1, text.context())

main.setCentralWidget (text)
app.setMainWidget (main)
 
main.show ()
app.exec_loop ()



Reply via email to