From kde-core-devel Fri Oct 17 23:51:32 2014 From: Kevin Kofler Date: Fri, 17 Oct 2014 23:51:32 +0000 To: kde-core-devel Subject: Re: QUrl from a string (porting KUrl constructor or KCmdLineArgs::url) Message-Id: X-MARC-Message: https://marc.info/?l=kde-core-devel&m=141358994226766 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