使用QUrl打开外部程序的方式

November 14th, 2016 by JasonLe's Tech Leave a reply »

最近几天忙于发布软件版本,可是在打包的时候,发现一个诡异的问题,那就是我在本机上通过QDesktopServices::openUrl(QUrl(QApplication::applicationDirPath()+‘xxxxx’));成功,而在客户环境下调用的外部程序,一直失败,但是我确定我的外部程序放在工作目录中,是哪里出了问题了呢?

查询Qt Document 也没有明确说为什么。最后我发现如果程序安装路径出现类似C:\Program Files (x86)这种带有括号的时候会失败,最后使用QDesktopServices::openUrl(QUrl::fromLocalFile(QApplication::applicationDirPath()+‘xxxxx’));才调用成功。

参考fromLocalFile函数

QUrl QUrl::fromLocalFile ( const QString & localFile ) [static]
Returns a QUrl representation of localFile, interpreted as a local file. This function accepts paths separated by slashes as well as the native separator for this platform.

可以看出该函数专门解析本机数据,接收本地/ \各种类型的分隔符。

 

参考:

http://www.pfeng.org/archives/808