QUrl from a string (porting KUrl constructor or KCmdLineArgs::url)

Kevin Kofler kevin.kofler at chello.at
Sat Oct 18 00:51:32 BST 2014


I wrote:
> even after reading the porting guide and listening to David Faure's
> Akademy talk, I am still unsure about what the best way is to get a URL
> from a string, supporting:
> * absolute URL (with explicit scheme:// only)
> * absolute local file path
> * relative path: everything neither an absolute URL nor an absolute local
>   file path is assumed to be a relative path (relative to the local CWD)
> as both KUrl::KUrl(QString) and KCmdLineArgs::url did (in slightly
> different, but similar ways).
> This is needed, e.g., when processing command-line arguments.
> I see the following APIs available:
> * QUrl::QUrl(QString): accepts an absolute URL or a relative URL, but the
>                        documentation explicitly warns that it must not be
>                        used on absolute local file paths
> * QUrl::fromLocalFile: accepts an absolute local file path or a relative
>                        local file path, but does not accept a URL
> * QUrl::fromUserInput: seems closest to what I want, but assumes a web
>                        browser context and in particular assumes http://
>                        in situations that should really be treated as a
>                        relative path in most contexts
> So, is there any function anywhere that does what I want? Or do I have to
> write something like:
> QDir::isAbsolutePath(str) ? QUrl::fromLocalFile(str) : QUrl(str)
> ? (And is QUrl(str) even OK for relative file paths or is there a
> difference between a relative URL and a relative local file path that I'm
> missing?)

So, Lukáš Tinkl answered me on #fedora-kde IRC. For posterity:
* Qt 5.4 introduces a new overload:
  with a third parameter that solves this issue.
* This is how Okular solves the problem without hard-depending on Qt 5.4:

        Kevin Kofler

More information about the kde-core-devel mailing list