如何使用 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 中的默认程序在服务器上打开文件?的主要内容,如果未能解决你的问题,请参考以下文章

QT 在 *nix 上打开默认文件资源管理器

qt如何在windows上打开usb摄像头?

qt: 系统默认程序打开文件或者软件;

win7系统如何使用IIS发布网站

无法在 Mac 上使用 qt 应用程序打开文件

如何设置默认打开图片方式