如何使用 Qt 中的默认程序在服务器上打开文件?
Posted
技术标签:
【中文标题】如何使用 Qt 中的默认程序在服务器上打开文件?【英文标题】:How do I open a file on server using the default program in Qt? 【发布时间】:2016-02-02 21:25:30 【问题描述】:我阅读的所有内容都表明QDesktopServices::openUrl
是使用默认程序打开文档的与平台无关的方式,并且几乎在所有时间都运行良好。
我说差不多,因为如果我将网络路径传递给它,它似乎总是失败。梳理源代码,我看到ShellExecute 返回错误代码2。
例子:
QUrl localpath = QUrl::fromLocalFile("C:/temp/myfile.txt");
QUrl networkpath = QUrl::fromLocalFile("//192.168.0.5/my folder/myfile.txt");
QDesktopServices::openUrl(localpath); //works fine
QDesktopServices::openUrl(networkpath); //always fails
有没有办法清理网络路径以正确打开?我在 Windows 上运行 Qt 4.8。将正斜杠切换为反斜杠没有帮助。
【问题讨论】:
首先,您应该使用QUrl::fromLocalFile
来构建file://
URL,而不仅仅是字符串连接。其次,我认为您需要将该网络路径映射到单元驱动器才能使您的外壳满意。 (或者 Windows 是否只是透明地处理这些路径?我非常怀疑,但谁知道......)
认为连续五个斜线可能与此有关。
@peppe:我已经更新了示例以包含QUrl::fromLocalFile
而不是 QString,但这并没有帮助。如果 shell 不喜欢网络路径,我会感到震惊,因为 其他所有东西 都喜欢,但我想我不应该这样。
我想知道名称中有空格(例如“我的文件夹”)是否有问题?您可以尝试不包含空格的路径,看看是否有什么不同。
没有变化。我认为 Windows shell 根本无法处理网络路径。例如,MS-DOS 要求您首先映射网络驱动器。 QProcess::startDetached 看起来是我的最佳选择。
【参考方案1】:
如果路径中有空格,则应使用 QUrl::TolerantMode。 试试这个:
QDesktopServices::openUrl(QUrl("file:////192.168.0.5/my folder/myfile.txt", QUrl::TolerantMode));
【讨论】:
QUrl::TolerantMode
已经是default mode。以上是关于如何使用 Qt 中的默认程序在服务器上打开文件?的主要内容,如果未能解决你的问题,请参考以下文章