如何通过关联的外部程序打开文件,如果失败则调用“打开方式...”对话框?
它可以是与平台无关的代码吗?或者我需要使用
#ifdef
#else
#endif
为每个平台实现“open with ...”对话框的构造?
提前致谢
编辑:经过几个小时的研究后,我发现了一个很好的Windows解决方案。
我们尝试使用ShellExecute(...)打开文件,如果文件关联错误失败,我们通过“打开”Shell32.dll对话框打开文件
QString file_path = "C:\VeryGoodPath.txt";
int iResult = (int)ShellExecuteA(0, 0, file_path.toStdString().c_str(), 0, 0 , SW_SHOW );
if(iResult>32)
{
// Succesful run
}
else
{
if(SE_ERR_ASSOCINCOMPLETE==iResult)
{
QString ShellCmd = "C:\\Windows\\system32\\shell32.dll,OpenAs_RunDLL \""+file_path +"\"";
ShellExecuteA(0,"open", "C:\\Windows\\system32\\rundll32.exe",ShellCmd.toStdString().c_str(),NULL, SW_NORMAL);
}
else
{
// Errors
}
}
EDIT2:问题是,我不会在
中使用 QDesktopServices::openUrl(...)
这个功能
QUrl::fromLocalFile("<path_to_your_file>")
答案 0 :(得分:2)
一种简单的方法是使用QDesktopServices::openUrl
:
QDesktopServices::openUrl(QUrl::fromLocalFile("<path_to_your_file>"));
这样您可以让操作系统处理它。如果一个程序与该文件(或一般的URL)相关联。您也可以使用此功能在默认浏览器中打开一个URL,操作系统将启动它或显示默认值&#34;打开&#34;对话框。