Qt之QDesktopServices

简介: 简述QDesktopServices类提供的函数用于访问常见的桌面服务。许多桌面环境都会提供一系列服务,可以通过应用程序来执行常见任务,如:以用户应用程序首选项的方式,打开一个网页。此类包含为服务提供简单接口的函数,返回值表明执行成功或失败。openUrl()函数用于打开位于任意外部应用程序的URL文件。如果URL对应于本地文件系统的资源(URL scheme

简述

QDesktopServices类提供的函数用于访问常见的桌面服务。

许多桌面环境都会提供一系列服务,可以通过应用程序来执行常见任务,如:以用户应用程序首选项的方式,打开一个网页。

此类包含为服务提供简单接口的函数,返回值表明执行成功或失败。

openUrl()函数用于打开位于任意外部应用程序的URL文件。如果URL对应于本地文件系统的资源(URL scheme是”file”),将会用一个合适的应用程序打开文件,否则,将使用一个Web浏览器来获取和显示该文件。

URL Handlers

openUrl()函数的行为可以定制,对于某些类型的URL,允许应用程序覆盖默认的处理行为。

调度机制只允许每个URL scheme使用一个自定义handler,使用setUrlHandler()函数。每个handler为一个槽,只接受一个QUrl参数。

对于每个scheme,现有handler可以用unsetUrlHandler()函数移除,这将返回给定scheme的默认行为处理方式。

这个系统很容易实现帮助系统。例如:帮助可以提供标签和文本浏览器使用URL:help://myapplication/mytopic,并通过注册一个handler就可以显示应用程序内的帮助文本。

class MyHelpHandler : public QObject
{
    Q_OBJECT
public:
    ...
public slots:
    void showHelp(const QUrl &url);
};

QDesktopServices::setUrlHandler("help", helpInstance, "showHelp");

在handler中,如果你认为不能打开请求的URL,可以调用QDesktopServices:openUrl(),它将试图使用合适的用户桌面环境打开URL。

注意:Qt5以后,storageLocation()和displayName() 已经由QStandardPaths类的功能取代。

静态共有成员函数

  • bool openUrl(const QUrl & url)

以用户桌面环境的适当Web浏览器打开指定的的url。如果成功,返回true;否则,返回false。

例如,用默认浏览器(例如:Chrome)打开一个网址:

QDesktopServices::openUrl(QUrl("http://blog.csdn.net/liang19890820"));

如果URL是本地文件(即:URL scheme是”file”),将会用一个合适的应用程序打开,而不是Web浏览器。

例如,打开一个Windows下包含空格的文件夹:

QDesktopServices::openUrl(QUrl("file:///D:/Program Files/Youdao"));

如果指定一个mailto地址,将会打开e-mail客户端(例如:Outlook),类似于由一个Web浏览器mailto到一个地址。

例如,下面的URL包含收件人(user@qt.com)、主题(Qt)和正文(I am a Qter):

QString strUrl = QString("mailto:%1?subject=%2&body=%3").arg("user@qt.com").arg("Qt").arg("I am a Qter");
QDesktopServices::openUrl(QUrl(strUrl));

警告:

  1. 尽管许多e-mail客户端可以发送附件,并且是能够处理unicode,用户可能已经配置了客户端没有这些功能。同时,某些e-mail客户端(例如:Lotus Notes)使用长URLs可能会有问题。

  2. 真正的返回值表示应用程序已成功请求操作系统用外部应用程序打开请求的URL,但外部应用程序可能仍无法启动或无法打开请求的URL,这将不会报告给应用程序。


  • void setUrlHandler(const QString & scheme, QObject * receiver, const char * method)

为给定的scheme设置handler,receiver是接受者,method为receiver提供的处理函数。

这个函数提供了一种方法来定制openUrl()行为。如果以指定的scheme调用openUrl()(带参数URL),接受者指定的函数将被调用来代替QDesktopServices启动外部应用程序。

接受者提供的函数必须是一个槽,只有接受一个QUrl参数。

如果setUrlHandler()用于为已经拥有handler的scheme设置一个新的handler,现有的handler将被新的替换。由于QDesktopServices并不需要处理handler的所有权,当handler被替换时不删除对象。

注意:handler将总是被执行QDesktopServices::openUrl()的相同线程调用。

例如,检测到scheme为http或file时,不用默认的应用程序打开,直接弹出一个提示框:

QDesktopServices::setUrlHandler("http", this, "openUrl");
QDesktopServices::setUrlHandler("file", this, "openUrl");

QDesktopServices::openUrl(QUrl("http://blog.csdn.net/liang19890820"));
QDesktopServices::openUrl(QUrl("file:///D:/Program Files/Youdao"));

bool MainWindow::openUrl(const QUrl &url)
{
    QString strScheme = url.scheme();
    if (QString::compare(strScheme, "http", Qt::CaseInsensitive) == 0)
    {
        QMessageBox::information(this, QString::fromLocal8Bit("提示"), QStringLiteral("打开的是一个网址:%1").arg(url.url()));
        return true;
    }
    else if(QString::compare(strScheme, "file", Qt::CaseInsensitive) == 0)
    {
        QMessageBox::information(this, QString::fromLocal8Bit("提示"), QStringLiteral("打开的是一个文件:%1").arg(url.url()));
        return true;
    }

    return false;
}

很多人看了好多遍还不会这个用法,不明觉厉,赶快去试试吧!


  • void unsetUrlHandler(const QString & scheme)

删除指定scheme预先设定的URL handler。

例如,对于上面定制的handler,现在不需要了:

QDesktopServices::unsetUrlHandler("http");
目录
相关文章
|
Linux 调度 数据安全/隐私保护
Qt之QFtp
简述 QFtp 类提供了一个 FTP 协议的客户端实现。 该类提供了一个到 FTP 的直接接口,允许对请求有更多的控制。但是,对于新的应用程序,建议使用 QNetworkAccessManager 和 QNetworkReply,因为这些类拥有一个更简单、还更强大的 API。 简述 QFtp 工作流程 基本使用 连接并登录 FTP 服务器 切换工作目录 列出目
6705 0
|
5月前
26 QT - 事件过滤器
26 QT - 事件过滤器
22 0
|
11月前
|
存储
Qt之QLCDNumber
Qt之QLCDNumber
290 0
Qt之QImageReader
简述 QImageReader类为从文件或设备读取图像提供了一个独立的接口。 读取图像最常用的方法是通过构造QImage和QPixmap,或通过调用QImage::load()和QPixmap::load()。QImageReader是一个专业读取图像的类,可以有更多的控制,例如,可以通过调用setScaledSize()读取图像成特定的大小,通过调用setClipRec
2533 0
|
存储 安全 Windows
Qt之QEvent
简述 QEvent 类是所有事件类的基类,事件对象包含事件参数。 Qt 的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件,将它们转化为 QEvents,然后将转换后的事件发送给 QObjects。 一般来说,事件来自底层窗口系统(spontaneous() 返回 true),但也可以使用 QCoreApplication:
1743 0
|
数据安全/隐私保护
Qt之QUrl
简述 QUrl 类提供了一个方便的接口使用 URLs。 它可以解析和构造编码和未编码形式的 URLs。QUrl 也支持国际化域名(IDNs)。 简述 详细描述 错误检查 字符转换 URL格式 scheme Authority user info path query fragment 深入使用 相对路径 用户输入 文件名 主机端口 本地文件 百分比编码
6197 0
|
存储
Qt之QUrlQuery
简述 QUrlQuery 类提供了一种方法来操纵 URL 查询中的 key-value 对。 简述 详细描述 编码 处理空格和加号 全解码 非标准分隔符 使用 QUrlQuery 分隔符 查询 删除 是否为空 详细描述 QUrlQuery 用来解析 URL 中的查询字符串,像下面这样: 上述的查询字符串在 URL 中 被用来传输
2681 0
|
索引
Qt之QToolBox
简述 QToolBox类提供了一个列(选项卡式的)部件条目。 QToolBox可以在一个tab列上显示另外一个,并且当前的item显示在当前的tab下面。每个tab都在tab列中有一个索引位置。tab的item是一个QWidget 。 简述 详细描述 使用 效果 源码 详细描述 每个item都有一个itemText()、一个可选的itemI
2453 0
Qt之QDateEdit和QTimeEdit
简述 QDateEdit类提供了一个部件,用于编辑日期。QTimeEdit类提供了一个部件,用于编辑时间。 简述 详细描述 基本使用 各司其职 莫强求 更多参考 详细描述 QDateEdit和QTimeEdit均继承自QDateTimeEdit,许多特性和功能都有QDateTimeEdit提供。这些都是相关属性: QDateEdit da
2793 0
|
Unix Linux Windows
Qt之QLocalServer
简述 QLocalServer提供了一个基于本地socket的server。 QLocalServer可以接受来自本地socket的连接。通过调用listen(),让server监听来自特定key的连接。 调用nextPendingConnection()来接受一个挂起(等待)的连接作为一个已连接的QLocalSocket。函数返一个QLocalSocket指针,可以被
1934 0