我正在尝试修改库存QFileDialog以更好地支持SNFS文件系统。目前它在删除文件后没有更新。因此,如果用户删除文件,该文件仍会显示在对话框中。
所以我需要的是在用户从对话框中删除文件后获得通知的一些方法,或者删除默认快捷方式的方法,以便我可以实现自己的。
到目前为止我已尝试过:
为DEL键安装eventFilter
事件似乎在QFileDialog进入我的过滤器之前就已经停止了。
添加我自己的快捷方式
这导致:
QAction::eventFilter: Ambiguous shortcut overload: Del
删除设置快捷方式
我在对话框中调用以下函数来递归删除所有设置的快捷方式和操作:
def to_children(self, parent):
for child in parent.children():
if hasattr(child, 'removeAction'):
for a in child.actions():
child.removeAction(a)
if hasattr(child, 'releaseShortcut'):
for i in range(100):
self.releaseShortcut(i)
self.to_children(child)
然而,快捷方式仍然有效。
答案 0 :(得分:1)
有很多方法可以删除文件 - 挂钩快捷方式不会帮助你。
有两种文件对话框:native和Qt对话框。本机对话框跟踪Windows和OS X上的文件系统状态,可能稍有延迟,这是特定于平台的,并且在所有应用程序中都存在相同程度。在这些平台上,您不应该做任何进一步的事情。 Qt对话框总是在Windows上使用,也可以在其他平台上使用,它使用文件系统模型,在可能的情况下,它会收到有关文件系统状态更改的通知。
必须回答的问题:
您使用的是哪个对话框(本机或Qt)? DontUseNativeDialog
选项可以设置为强制Qt对话框。
您平台上的SNFS是否实现了文件系统更改通知?
您是否验证了文件系统更改通知是否有效并被Qt的QFileSystemModel
选中 - 如果是,则会通知Qt文件对话框是否有平台对话框。