Qt:如何通过外部程序打开文件,"open with..."对话框
Qt: How to open file by external programm, "open with..." dialog
如何通过关联的外部程序打开文件,如果失败,则调用"用…打开"对话框?
它可以是独立于平台的代码吗?或者我需要使用
#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)相关联,操作系统将启动它或显示默认的"打开方式"对话框。
相关文章:
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 从生成文件编译错误:"Unable to open output file" ..."No such file or directory"
- 我可以对"int 文件 = open(path, flag);"做点什么吗?
- 进口。TLB文件给出"cannot open source file x.tlh"
- Open() 用于创建文件和打开现有文件.有人能分辨出其中的区别
- 成功使用CMakeLists制作后如何修复"open: No such file or directory"错误(该文件实际上存在)
- 为什么打开许多文件时"open file failed"?
- 已安装 SDK 的头文件的"Cannot open source file"
- 如何使用 C/C++检查 ZIP 文件(Office Open XML 文件)的完整性
- 读取视频文件"Open CV WARNING: Couldn't read movie file bird.avi"时出现问题
- C++ 中的文件处理错误 - 调用"std::basic_fstream<char, std::char_traits<char> >::open(const char[8],
- open() 的参数:每个人都应该拥有对文件的所有访问权限,并且应该在创建时被截断
- 包括新文件夹中的头文件 "cannot open include file - no such file or directory"
- 系统调用 open() 创建可执行文件
- 使用ofstream或fstream-open不会出错,也不会打开文件
- Qt/QML:如何在不重新启动应用程序的情况下"switch to"或"open"另一个 QML 文件?
- Qt:如何通过外部程序打开文件,"open with..."对话框
- 文件打开时"QIODevice::write: device not open"
- "Error C1083: Cannot open include file"但我有包含文件的路径
- file.open()找不到文件、c++、Xcode、OpenGL