Linux似乎很简单:xdg-open <file/directory/URL>
.
显然,Mac是类似的:open
应该使用而不是xdg-open
. 我无法使用 Mac,因此无法对其进行测试。
对于Windows,我发现了 4 个不同的建议,而我尝试过的那些都失败了。
java - 如何从Java中关注shell打开文件的默认程序?建议
cmd /c start ...
如何为给定文件打开用户系统首选编辑器?
如何使用 Java 找出默认文件打开器? 建议
RUNDLL32.exe
在 C 中使用 ShellExecute() 打开 .txt在 C++ 代码中使用 Windows 本机程序打开文件的正确方法是什么
如何使用 ShellExecute 在 Windows 中使用 C++ 打开 html 文件?建议
ShellExecute
我已经尝试过使用system()
andQProcess::startDetached()
和"http://www.stackoverflow.com"
作为参数的前 3 个,但它们都失败了;start
虽然从命令行工作得很好。我还没试过ShellExecute
。
Windows 相当于xdg-open
什么?在我看来,是的,start
但为什么我的尝试start
失败了?
是ShellExecute
我唯一的选择吗?
编辑我认为QDesktopServices::openUrl()
仅适用于网页,因为它不适用于文件或目录。
经过一些调试,我发现如果我在 Windows 上的路径中替换\\
为/
,它适用于文件,但目录仍然没有打开。任何想法我做错了什么?
QDir dir("C:/Documents and Settings/ali");
qDebug() << "Exists? " << dir.exists();
qDebug() << dir.absolutePath();
QDesktopServices::openUrl(QUrl(dir.absolutePath()));
qDebug() << "External app called";
应用程序输出:
Exists? true
"C:/Documents and Settings/ali"
External app called
但是什么也没发生,目录没有打开。在 Linux 上,目录按预期使用默认文件管理器打开。
解决方案:由于 Qt 错误和Windows 怪癖(应用程序窗口格式错误),我最终使用ShellExecute
. 这给了我足够的灵活性,可以以一定的代价实现我想要的……