使用QDesktopServices打开资源文件遇到的问题

使用QDesktopServices打开资源文件遇到的问题

开发时,会有点击链接会自动打开文件夹或该资源的位置的需求。比如下载文件,下载好后弹框提示位置,点击后可直接打开。
但在部分人电脑中,选择了下载位置,下载资源成功后点击弹窗中的连接,打开资源却失败了,本文主要介绍资源打开失败解决该问题的经验。
使用Qt的开发者都知道,使用QDesktopServices打开文件目录或网络连接。代码如下:

bool QDesktopServices::QDesktopServices::openUrl(const QUrl &url)

Qt文档中的介绍是该接口可以通过web浏览器打开网址url,或使用合适的应用程序打开本地文件或目录。

方法代码如下:

void CInformationDlg::onOpenFolderBtnClicked()
{
        if (m_strPath.isEmpty())
        {
            return;
        }

        QString totalUrl = "";
        QString lefStr = m_ strPath.left(m_ strPath.lastIndexOf("/"));
        if (!lefStr.startsWith("file:///"))
        {
            totalUrl = "file:///" + lefStr;
        }
        else
        {
            totalUrl = lefStr;
        }
        QDesktopServices::openUrl(QUrl(totalUrl, QUrl::TolerantMode));
}

调用该接口主要是打开本地文件或目录。判断如果路径前没有加file:///,则加上打开本地文件,否则直接打开。
解决问题的思路是写了一个小demo,点击按钮选中一个文件夹,点击确定后,点击另一个按钮可打开刚刚选中的文件夹。在本机中选中的文件夹是桌面文件夹,获取到的路径是:

C:/Users/XXX/Desktop

将demo发给有问题的电脑,打印日志显示其桌面路径为:

//XXX/YF_YYRJ$/XXX/Desktop/

对于这种UNC路径,直接打开或者加file:///均无法使用此接口打开。
经查询,发现已有人有相似的问题,在XP\LINUX等系统中相对路径也可以,但是换成Win7下就错误,在Win7下必须得传绝对路径。
在这里插入图片描述

考虑到UNC路径也不是绝对路径,因此调用QUrl::fromLocalFile方法先将路径转换为绝对路径。
QUrl::fromLocalFile方法Qt官方文档的介绍中也明确表明支持带有双前导斜杠(或反斜杠)的路径,以指示远程文件,如“//servername/path/to”/文件.txt"。
调用该接口后再调用openUrl,则可以正常打开,问题解决。

最后简单介绍下几种路径名。

绝对路径(全路径):一个绝对路径以盘符(win32) 或根路径开始
相对路径:相对于当前的目录。相对路径用. …来表示。.用来表示当前目录, …用来表示当前目录的父目录。
UNC路径名:UNC 是(Universal Naming Convention)的缩写,它是一个访问在互联网上的电脑上的目录或者文件 而定义的语法。\<shared directory>\。
UNC路径名的一些规则
•UNC 路径不能包含盘符(如 D:)
•你参访问互联网电脑分享的目录
•不能使用相对路径
URLS:URL是(Uniform Resource Locator),互联网上的文档的地址是唯一的。URL由以下部分组成:访问资源使用的协议、端口、主机的路径,比如https://www.baidu.com/。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值