检查是不是安装了 PDF 阅读器 - QDesktopServices::openUrl()

Posted

技术标签:

【中文标题】检查是不是安装了 PDF 阅读器 - QDesktopServices::openUrl()【英文标题】:Check, if a PDF-Reader is installed - QDesktopServices::openUrl()检查是否安装了 PDF 阅读器 - QDesktopServices::openUrl() 【发布时间】:2015-01-28 10:39:29 【问题描述】:

我想检查是否安装了 pdf 阅读器。这个想法是使用QDesktopServices::openUrl("path/test.pdf"),如果它返回“false”,我知道没有安装pdf阅读器。问题是,如果安装了 pdf 阅读器,它会打开 pdf。我可以“禁用”它吗?

/edit:我的解决方案:

QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.pdf\\OpenWithProgids", QSettings::NativeFormat);
 if (settings.allKeys().size() == 0) ...

【问题讨论】:

什么是pdf阅读器? Adobe Acrobat 阅读器? QDesktopServices::openURL() 调用您用于 *.pdf 文件的标准程序。所以它可以是AdobeAcrobat阅读器,也可以是另一个程序。 【参考方案1】:

我可以“禁用”它吗?

简单的答案 - 不。

由于 QDesktopServices::openUrl 要求系统使用关联程序打开文件,因此您无法通过 Qt 禁用它。

虽然不推荐,但您可以在每个平台上禁用此功能,但如果您采用该方法,我建议使用每个平台自己的功能来检查是否有与 pdf 数据文件关联的应用程序。

在 Windows 上,它存储在 registry 中,而 OS X 使用 LaunchServices。

但是,仅仅因为文件关联不存在,并不意味着没有安装合适的应用程序来打开 pdf。

如果您希望能够显示 pdf,最好直接在程序中处理它。您可以阅读该here 的一些选项。

【讨论】:

谢谢!我现在使用注册表来解决问题。我将我的解决方案添加到我的第一篇文章中。

以上是关于检查是不是安装了 PDF 阅读器 - QDesktopServices::openUrl()的主要内容,如果未能解决你的问题,请参考以下文章

只有PDF文件一打开就提示windows找不到文件,请确定文件名是不是正确?

PDF下载无法打开

为啥PDF文件打开不能显示正常内容?

C# 在Winform中打开PDF

直接在火狐浏览器中下载了一个PDF文件,但是一直都打不开是为啥。

pdf阅读器仅阅读前2页,但不是obj c中PDF文件的所有页面