【问题标题】:How to change application that is used to open a file by ``QDesktopServices.openUrl``如何通过“QDesktopServices.openUrl”更改用于打开文件的应用程序
【发布时间】:2015-08-28 15:12:28
【问题描述】:

我正在尝试调试在 Calibre 中打开 CBR 文件的问题(它是 explained here)。特定的 Callibre 问题大多无关紧要,归结为文件和文件夹被不正确的外部程序打开的问题。

经过一些调试,我发现罪魁祸首很可能是对QDesktopServices.openUrl(qurl) 的调用,它选择了错误的应用程序来处理特定文件。

Qt documentation 对于这种方法的工作原理有些简洁(我真的很关心 Python 版本,但我猜它的行为是相同的):

如果 URL 是对本地文件的引用(即 URL 方案是“文件”),那么它将使用合适的应用程序而不是 Web 浏览器打开。

我的 linux 环境似乎配置正确,如果我在 Nautilus 中双击此文件(我并没有准备好完整的 KDE 环境),它会在正确的程序中打开。

所以问题是:

  • openUrl 如何找到合适的应用程序来打开文件。
  • 如何更改处理该文件的应用程序。

【问题讨论】:

  • 您使用的是什么特定的 Linux DE?对于qt5,桌面服务由平台集成插件处理,默认只支持少数DE。如果使用有效的本地文件 url 调用 openUrl 只是返回 False 而不打印任何 Qt 调试消息,这很可能意味着您的系统上没有可用的平台集成插件。如果是这种情况,您可以使用setUrlHandler 显式调用xdg-open 之类的东西(无论如何大多数插件都会这样做)。
  • @ekhumoro 我将 debian 与 i3 window maganer 一起使用。 openUrl 返回 true,因为它打开了文件,但是文件是在不正确的程序中打开的(以及与 thunar 和 doplhin 使用的程序不同的程序)。

标签: qt pyqt debian qt5 calibre


【解决方案1】:

经过一些额外的研究,事实证明QDesktopServices.openUrl 在后台使用了 XDG 实用程序。结果与xdg-open 一致。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多