Как уже отмечалось в комментариях, похоже, нет способа (пока?) Получить сам путь без регулярного выражения. Так что это единственный выход:
Базовое решение
FileDialog {
onAccepted: {
var path = myFileDialog.fileUrl.toString();
// remove prefixed "file:///"
path = path.replace(/^(file:\/{3})/,"");
// unescape html codes like '%23' for '#'
cleanPath = decodeURIComponent(path);
console.log(cleanPath)
}
}
Это регулярное выражение должно быть достаточно надежным, поскольку оно удаляет только file:///
из начала строки.
Вам также потребуется отменить экранирование некоторых символов HTML (если имя файла содержит, например, хэш #
, он будет возвращен как %23
. Мы декодируем это с помощью функции JavaScript decodeURIComponent()
).
Полнофункциональный пример
Если вы хотите отфильтровать не только file:///
, но также qrc://
и http://
, вы можете использовать этот RegEx:
^(file:\/{3})|(qrc:\/{2})|(http:\/{2})
Итак, новый полный код будет выглядеть следующим образом:
FileDialog {
onAccepted: {
var path = myFileDialog.fileUrl.toString();
// remove prefixed "file:///"
path= path.replace(/^(file:\/{3})|(qrc:\/{2})|(http:\/{2})/,"");
// unescape html codes like '%23' for '#'
cleanPath = decodeURIComponent(path);
console.log(cleanPath)
}
}
Это хорошая площадка для RegEx: http://regex101.com/r/zC1nD5/1 а>
person
mozzbozz
schedule
11.11.2014
RFC 3986
URL начинается с протокола. В вашем случае этоfile://
. Все компоненты Qt понимают это, даже хуже, иногда вы получите ошибку при передаче чего-то вродеc:/bar.txt
. Если вы все еще хотите получить этот URLwrong
способом, вы просто хотите заменить часть протокола -theurl.toString().replace("file:///","")
- person folibis   schedule 24.07.2014file:///
с тремя косыми чертами необходимо для Windows, но не работает в Unix. - person Roman Plášil   schedule 20.08.2017::toString(QUrl::FormattingOptions options)
метод. Соответствующие параметры здесь:QUrl::RemoveScheme
иQUrl::PreferLocalFile
: org.qt-project. qtlocation.5151 / qtcore / Не уверен, доступен ли он QML. - person bam   schedule 31.12.2020