如何获取系统默认浏览器?

3
有没有 Qt 的界面来获取系统的默认浏览器?
我想在浏览器中明确地打开一个 file:// URL,而不是使用系统的默认应用程序,因此QDesktopServices::openUrl 不是适合的方式,因为

如果 URL 是对本地文件的引用(即,URL 方案是 "file"),则它将会被适当的应用程序而不是 Web 浏览器打开。


1
你不应该去愚弄系统设置。你为什么要在那里强行干预呢?你说的是哪种文件? - peppe
一个许可证文件(.html),不应该在任何IDE或文本编辑器中打开,而应该被渲染。 - Simon Warta
1
如果用户决定设置一个IDE来打开html文件,那就是她的问题,我想说...那个HTML内容在你的控制之下吗?你可以让它“足够简单”以便由QTextBrowser渲染。(或者全力以赴,将WebKit / Chromium与您的应用程序一起发布)。 - peppe
是的,我生成并发送 .html 文件。如果需要,我也可以将其更改为 PDF 格式。关键是用户永远不会亲手拿到文件。因此,这不是“用户使用首选应用程序打开文件”的操作,而是“显示许可证”的操作。因此,文件格式是与用户无关的实现细节。QTextBrowser 是一个选择,其他文件格式也可以。本地 HTTP 服务器也可以。但这并没有回答问题。我不敢相信在浏览器中打开某些东西有多难。 - Simon Warta
因为这几乎不是必要的。如果您愿意,只需处理一小部分特定于平台的代码。在符合FDG标准的桌面环境下,您可以调用 x-www-browser;我不知道Windows或macOS。 - peppe
1个回答

0

针对您的特定应用程序,您应该使用Qt附带的Web引擎:

QWebEngineView *view = new QWebEngineView{parent};
view->load(QUrl{"file://...."});
view->setWindowFlags(Qt::Window);
view->setAttribute(Qt::WA_DeleteOnClose);
view->show();

如果HTML足够简单,可以使用文本浏览器:
QTextBrowser *view = new QTextBrowser{parent};
view->setSource(Qurl{"file://...."});
view->setWindowFlags(Qt::Window);
view->setAttribute(Qt::WA_DeleteOnClose);
view->show();

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