Qt:如何通过外部程序打开文件,"open with..."对话框
Qt: How to open file by external programm, "open with..." dialog
如何通过关联的外部程序打开文件,如果它失败调用 "open with..." 对话框?
它可以是平台独立代码吗?或者我需要使用
#ifdef
#else
#endif
为每个平台实施 "open with..." 对话调用的结构?
提前致谢
编辑:更新,经过几个小时的研究,我找到了 Windows 的好解决方案。
我们尝试使用 ShellExecute(...) 打开文件,如果因文件关联错误而失败,我们将通过 "open as" 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>")
一种简单的方法是使用 QDesktopServices::openUrl
:
QDesktopServices::openUrl(QUrl::fromLocalFile("<path_to_your_file>"));
这样就可以让操作系统来处理了。如果某个程序与该文件相关联(或通常为 URL。您也可以使用此功能在默认浏览器中打开 url),操作系统将启动它或显示默认 "Open with"对话框。
如何通过关联的外部程序打开文件,如果它失败调用 "open with..." 对话框?
它可以是平台独立代码吗?或者我需要使用
#ifdef
#else
#endif
为每个平台实施 "open with..." 对话调用的结构?
提前致谢
编辑:更新,经过几个小时的研究,我找到了 Windows 的好解决方案。
我们尝试使用 ShellExecute(...) 打开文件,如果因文件关联错误而失败,我们将通过 "open as" 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>")
一种简单的方法是使用 QDesktopServices::openUrl
:
QDesktopServices::openUrl(QUrl::fromLocalFile("<path_to_your_file>"));
这样就可以让操作系统来处理了。如果某个程序与该文件相关联(或通常为 URL。您也可以使用此功能在默认浏览器中打开 url),操作系统将启动它或显示默认 "Open with"对话框。