【问题标题】:How to open a file with Qt when there is no default program for it?没有默认程序时如何使用Qt打开文件?
【发布时间】:2020-07-15 13:29:19
【问题描述】:

Qt 中有一个QDesktopServices::openUrl 函数,可以使用默认程序打开文件,例如当您想使用 Microsoft Office 打开 .docx 文件时。但是,如果没有与所请求文件的文件扩展名关联的默认程序,该函数将简单地返回 0 并且不执行任何操作。我希望 Qt 显示这样的内容:

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

Qt 可以吗?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    这个对我有用。但除了我的 Windows 7 机器,我没有在任何地方测试它

    QDesktopServices::openUrl(QUrl::fromLocalFile("D:/file"));
    

    【讨论】:

    • 在 Windows 10 上:这适用于某些文件扩展名(我尝试过 .ipdb、.sdb),但不适用于 .dll,例如。有趣。
    • 在后台调用 ShellExecute 函数。请参阅来源code.woboq.org/qt5/qtbase/src/plugins/platforms/windows/…。您也可以尝试直接使用 ShellExecute 来获得所需的结果
    【解决方案2】:

    试试这样的。它应该打开您需要的对话框。但是在 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多