【发布时间】:2020-07-15 13:29:19
【问题描述】:
Qt 中有一个QDesktopServices::openUrl 函数,可以使用默认程序打开文件,例如当您想使用 Microsoft Office 打开 .docx 文件时。但是,如果没有与所请求文件的文件扩展名关联的默认程序,该函数将简单地返回 0 并且不执行任何操作。我希望 Qt 显示这样的内容:
跨平台解决方案将是理想的。
Qt 可以吗?
【问题讨论】:
Qt 中有一个QDesktopServices::openUrl 函数,可以使用默认程序打开文件,例如当您想使用 Microsoft Office 打开 .docx 文件时。但是,如果没有与所请求文件的文件扩展名关联的默认程序,该函数将简单地返回 0 并且不执行任何操作。我希望 Qt 显示这样的内容:
跨平台解决方案将是理想的。
Qt 可以吗?
【问题讨论】:
这个对我有用。但除了我的 Windows 7 机器,我没有在任何地方测试它
QDesktopServices::openUrl(QUrl::fromLocalFile("D:/file"));
【讨论】:
试试这样的。它应该打开您需要的对话框。但是在 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;
}
【讨论】: