FormDialog 的
selectedFile
属性在转换为字符串时看起来像 URI:
FolderDialog {
onAccepted: monitorForm.monitorPath = selectedFolder
}
Label {
text: monitorForm.monitorPath
}
我需要将其显示为本地路径:
另一个问题询问一种使用 QML 来做到这一点的方法。这个问题的答案实现了自己处理平台之间差异的方法(除了最上面的答案,它仅在 Windows 上正确工作并删除了 Linux 上的前导斜杠)。我希望有一种方法可以利用 PySide 自动执行此操作。
在 C++ 中,QUrl::toString() 采用 QUrl::UrlFormattingOption —— 其中之一是 QUrl::PreferLocalFile:
如果根据 isLocalFile(),URL 是本地文件并且不包含查询或片段,则返回本地文件路径。
PySide6 也提供 toString(),但由于 bug,toString() 需要 QUrl.ComponentFormattingOption 而不是 QUrl.UrlFormattingOption。 QUrl.ComponentFormattingOption 没有 PreferLocalFile 标志,但我们可以将 QUrl.UrlFormattingOption 转换为 QUrl.ComponentFormattingOption,如下所示:
QUrl.ComponentFormattingOption.PrettyDecoded | QUrl.UrlFormattingOption.PreferLocalFile
完整代码:
GridLayout { // The root element
id: monitorForm
signal folderSelected(folder: string)
property string monitorPath
Label {
text: monitorForm.monitorPath
}
FolderDialog {
onAccepted: monitorForm.folderSelected(selectedFolder)
}
}
import sys
from PySide6.QtCore import QUrl
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load('main.qml')
root = engine.rootObjects()[0]
def assign_url_to_monitorPath(x):
root.setProperty('monitorPath', x.toString(QUrl.ComponentFormattingOption.PrettyDecoded | QUrl.UrlFormattingOption.PreferLocalFile))
root.folderSelected.connect(assign_url_to_monitorPath)
exit(app.exec())