是否可以重命名QFileDialog侧边栏中的QUrl快捷方式?
可行解决方案
前置说明
Qt 官方没有直接提供自定义侧边栏标签的公开API,要实现这个需求需要先禁用系统原生文件对话框,手动修改Qt自绘对话框的侧边栏控件的显示文本。
实现步骤
- 初始化
QFileDialog时开启DontUseNativeDialog选项,禁用系统原生对话框,否则无法访问Qt控件对象进行修改 - 设置完侧边栏路径后,查找Qt内置的侧边栏
QListView控件 - 遍历控件模型的所有条目,匹配对应路径后修改显示文本即可,不会影响原有跳转逻辑
完整代码示例
from PyQt5 import QtWidgets, QtCore place1 = "C:\\publicDirectories\\software\\temp" place2 = "D:\\personalUserDirectories\\software\\temp" # 配置路径与自定义显示名称的映射 sidebar_name_map = { place1: "公共临时目录", place2: "个人临时目录" } dialog = QtWidgets.QFileDialog(self, '搜索', directory, filter) dialog.setFileMode(QtWidgets.QFileDialog.DirectoryOnly) # 必须开启该选项,使用Qt自绘对话框而非系统原生对话框 dialog.setOption(QtWidgets.QFileDialog.DontUseNativeDialog, True) # 先设置侧边栏路径 dialog.setSidebarUrls([QtCore.QUrl.fromLocalFile(place1), QtCore.QUrl.fromLocalFile(place2)]) # 查找侧边栏控件 sidebar_list = dialog.findChild(QtWidgets.QListView, "sidebar") if sidebar_list: model = sidebar_list.model() # 遍历所有侧边栏条目 for row in range(model.rowCount()): item_index = model.index(row, 0) # 取条目对应的路径 item_url = item_index.data(QtCore.Qt.UserRole) local_path = item_url.toLocalFile() # 匹配到路径则修改显示名称 if local_path in sidebar_name_map: model.setData(item_index, sidebar_name_map[local_path], QtCore.Qt.DisplayRole) dialog.exec_()
注意事项
- 该方案兼容所有Qt5、Qt6版本,修改显示文本仅改变视觉呈现,不会影响原路径的跳转逻辑
- 如果必须使用系统原生文件对话框,目前没有可行的自定义侧边栏标签的方案
内容的提问来源于stack exchange,提问作者mo_ses257
相关产品推荐
相关产品推荐

