如何在没有默认程序的情况下使用Qt打开文件?

3
在Qt中有一个QDesktopServices::openUrl函数,它可以打开默认程序打开文件,比如当你想用Microsoft Office打开.docx文件时。然而,如果没有为请求的文件扩展名关联默认程序,该函数将只返回0并且不会做任何事情。我希望Qt能够显示类似于这样的内容:

enter image description here

跨平台的解决方案将是理想的。

在Qt中是否可能实现?

2个回答

3
这个对我来说可行。但是除了我的Windows 7机器之外,我没有在其他地方进行过测试。
QDesktopServices::openUrl(QUrl::fromLocalFile("D:/file"));

在Windows 10上:这对于某些文件扩展名有效(我尝试过.ipdb,.sdb),但不适用于.dll文件。很有趣。 - Oleg Yablokov
在后台,它正在调用ShellExecute函数。请参见源代码https://code.woboq.org/qt5/qtbase/src/plugins/platforms/windows/qwindowsservices.cpp.html#_ZL12shellExecuteRK4QUrl。您也可以尝试直接使用ShellExecute来实现所需的结果。 - Mykhailo Bryzhak

0
尝试像这样做。它应该打开你需要的对话框。但是在Windows 10上,它不显示复选框,我不确定为什么。
#include <ShlObj.h>

bool openWith(const QString &filePath)
{
    QString nativePath = QDir::toNativeSeparators(filePath);
    OPENASINFO oi = {};
    oi.pcszFile = reinterpret_cast<LPCWSTR>(nativePath.utf16());
    oi.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_EXEC;
    return SHOpenWithDialog(NULL, &oi) == S_OK;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接