Qt 4.8 QUrl.toLocalFile behavior change, impacts to KUrl (and friends)

Thiago Macieira thiago at kde.org
Thu Oct 27 22:35:15 BST 2011


On Thursday, 27 de October de 2011 23:17:49 Milian Wolff wrote:
> On Thursday 27 October 2011 21:11:11 Thiago Macieira wrote:
> > On Thursday, 27 de October de 2011 13:32:51 Rex Dieter wrote:
> > > See also,
> > > http://bugs.kde.org/285028
> > > ( and https://bugreports.qt.nokia.com/browse/QTBUG-22382 )
> > > 
> > > In Qt 4.8, QUrl.toLocalFile now seems, by design, to return NULL for
> > > urls
> > > lacking any scheme.  Discovered this the hard way figuring out why all
> > > my
> > > audio knotifications were quiet.  Since audio event sources are simple
> > > filenames, e.g. KDE-K3B-Finish-Success.ogg, and
> > > QString soundFile = soundFileURL.toLocalFile();
> > > no longer works.
> > > 
> > > Any suggestions or advice on how best to deal with this?
> > 
> > As we discussed on IRC, any string source must be properly labelled
> > whether
> > they are a URL or they are a local file. They cannot be both.
> 
> is there at least a qWarning emitted in such a case, so we can find these
> problems with QT_FATAL_WARNINGS=1 ?

No, but there's something better:

#define QURL_NO_CAST_FROM_QSTRING

Your code will not compile when you're auto-casting. You'll need to select 
what to do:

	QUrl::fromEncoded() - if it's a URL, with the "file" scheme
	QUrl::fromLocalFile() - if it's a file name

This option remains in Qt 5, but there there's going to be a new method to 
convert from QString to QUrl without passing through QByteArray.

This is extremely important to get right because a filename and a URL are NOT 
the same. Certain characters in the string are interpreted differently 
depending on what the string is: %, # and ? in particular.

So, to be honest, the bug *already* *existed* in your code if you're finding 
these problems now. I just made it blatantly clear, and it's been there for a 
year for people to see.

I'm also calling right now KUrl's fromPathOrUrl a fatally flawed design.

-- 
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center
      PGP/GPG: 0x6EF45358; fingerprint:
      E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20111027/36be8007/attachment.sig>


More information about the kde-core-devel mailing list