Qt:如何通过外部程序打开文件,"open with..."对话框

Qt: How to open file by external programm, "open with..." dialog

本文关键字:文件 open 对话框 with 何通过 外部 程序 Qt      更新时间:2023-10-16

如何通过关联的外部程序打开文件,如果失败,则调用"用…打开"对话框?

它可以是独立于平台的代码吗?或者我需要使用

#ifdef
#else 
#endif 

为每个平台实现"用…打开"对话框调用的构造?

提前感谢

编辑:更新,经过几个小时的研究,我找到了适用于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
    }
}

第二版:问题是,我没有在中使用

 QDesktopServices::openUrl(...)

该功能

 QUrl::fromLocalFile("<path_to_your_file>")

一个简单的方法是使用QDesktopServices::openUrl:

QDesktopServices::openUrl(QUrl::fromLocalFile("<path_to_your_file>"));

通过这种方式,你可以让操作系统处理它。如果程序与该文件(或通常的URL。你也可以使用此功能在默认浏览器中打开URL)相关联,操作系统将启动它或显示默认的"打开方式"对话框。

相关文章: