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
Hi,
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:
http://doc-snapshot.qt-project.org/qt5-5.4/qurl.html#fromUserInput-2
with a third parameter that solves this issue.
* This is how Okular solves the problem without hard-depending on Qt 5.4:
http://quickgit.kde.org/?p=okular.git&a=commit&h=d98b4d920037422fe052ffa2633349d41fdbe02e
Kevin Kofler
More information about the kde-core-devel
mailing list