diff options
Diffstat (limited to 'src/corelib/io/qurl.cpp')
-rw-r--r-- | src/corelib/io/qurl.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 7018b333f2..51c48b88d7 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -364,6 +364,29 @@ */ /*! + \enum QUrl::UserInputResolutionOption + \since 5.4 + + The user input resolution options define how fromUserInput() should + interpret strings that could either be a relative path or the short + form of a HTTP URL. For instance \c{file.pl} can be either a local file + or the URL \c{http://file.pl}. + + \value DefaultResolution The default resolution mechanism is to check + whether a local file exists, in the working + directory given to fromUserInput, and only + return a local path in that case. Otherwise a URL + is assumed. + \value AssumeLocalFile This option makes fromUserInput() always return + a local path unless the input contains a scheme, such as + \c{http://file.pl}. This is useful for applications + such as text editors, which are able to create + the file if it doesn't exist. + + \sa fromUserInput() +*/ + +/*! \fn QUrl::QUrl(QUrl &&other) Move-constructs a QUrl instance, making it point at the same @@ -3715,11 +3738,15 @@ bool QUrl::isDetached() const "//servername/path/to/file.txt". Note that only certain platforms can actually open this file using QFile::open(). + An empty \a localFile leads to an empty URL (since Qt 5.4). + \sa toLocalFile(), isLocalFile(), QDir::toNativeSeparators() */ QUrl QUrl::fromLocalFile(const QString &localFile) { QUrl url; + if (localFile.isEmpty()) + return url; url.setScheme(fileScheme()); QString deslashified = QDir::fromNativeSeparators(localFile); @@ -4095,6 +4122,43 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Returns a valid URL from a user supplied \a userInput string if one can be deducted. In the case that is not possible, an invalid QUrl() is returned. + This overload takes a \a workingDirectory path, in order to be able to + handle relative paths. This is especially useful when handling command + line arguments. + If \a workingDirectory is empty, no handling of relative paths will be done, + so this method will behave like its one argument overload. + + By default, an input string that looks like a relative path will only be treated + as such if the file actually exists in the given working directory. + + If the application can handle files that don't exist yet, it should pass the + flag AssumeLocalFile in \a options. + + \since 5.4 +*/ +QUrl QUrl::fromUserInput(const QString &userInput, const QString &workingDirectory, + UserInputResolutionOptions options) +{ + QString trimmedString = userInput.trimmed(); + + if (trimmedString.isEmpty()) + return QUrl(); + + // Check both QUrl::isRelative (to detect full URLs) and QDir::isAbsolutePath (since on Windows drive letters can be interpreted as schemes) + QUrl url = QUrl(trimmedString, QUrl::TolerantMode); + if (url.isRelative() && !QDir::isAbsolutePath(trimmedString)) { + QFileInfo fileInfo(QDir(workingDirectory), trimmedString); + if ((options & AssumeLocalFile) || fileInfo.exists()) + return QUrl::fromLocalFile(fileInfo.absoluteFilePath()); + } + + return fromUserInput(trimmedString); +} + +/*! + Returns a valid URL from a user supplied \a userInput string if one can be + deducted. In the case that is not possible, an invalid QUrl() is returned. + \since 4.6 Most applications that can browse the web, allow the user to input a URL |