StupidBeauty
Read times:1386Posted at:Tue Jun 21 23:39:34 2011
- no title specified

Qt4.7.0文档翻译:QDesktopServices类参考,QDesktopServices Class Reference

详细描述

QDesktopServices类提供咯一些方法用来使用常规的桌面服务。

很多桌面系统都提供一些可被程序用来进行常规工作的服务,例如打开一个网页,并且是使用一种一致的却又兼顾到用户的偏好设置的方式。

这个类就包含咯一些为这些服务提供咯简单的接口的函数,它们还会告诉你的代码那些服务是成功咯还是失败咯。

openUrl ()函数用来在外部程序中打开位于任意URL的文件。对于那些指向本地文件系统的URL (那种情况下URL 的模式是"file"),会使用一个适当的程序来打开 ;否则的话 ,就会使用一个网页浏览器来下载并且显示那个文件。

用户的桌面设置选项控制的是某些特定的可执行文件是应该打开来浏览还是应该直接执行。某些桌面环境会阻止用户执行从外部URL下载来的文件,或者在执行之前要求用户确认权限。

URL处理器

openUrl ()函数的行为可针对单个URL 模式而定制 ,以便允许程序针对特定类型的URL来替换掉默认的处理行为

分发机制只允许对每个URL 模式有一个自定义的处理器 ;这个东西是使用 setUrlHandler ()函数来设置的 。每个处理器都被实现成一个信号槽 ,它接收一个 QUrl 作为参数。

针对每个模式的已有的处理器可使用 unsetUrlHandler ()函数来去除。这将会使得针对给定的模式的处理行为恢复成默认的行为。

举个例子,这个系统使得实现一个帮助系统非常容易。帮助信息可以在文本标签和文本浏览器中提供,使用help://myapplication/mytopic这样的URL,再注册一个处理器,这样就可以在程序内部显示帮助信息咯。

class MyHelpHandler : public QObject

{

Q_OBJECT

public:

...

public slots:

void showHelp(const QUrl &url);

};

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

如果你在处理器中认为你无法打开某个URL 的话 ,那么你可以只管再次带着相同的参数调用 QDesktopServices::openUrl () ,那样的话它会使用用户的桌面环境中的合适的机制来尝试打开那个URL 。参考 QSystemTrayIcon QProcess

成员函数文档

bool QDesktopServices::openUrl ( const  QUrl  &  url  )  [ 静态 ]

使用用户的桌面环境中的适当的网页浏览器打开指定的 url ,如果成功则返回真;否则返回假。

如果那个URL 是指向一个本地文件的话(也就是说,URL 模式是"file"),那么会使用一个适当的程序打开它,而不是使用网页浏览器。

下面这个例子打开Windows 文件系统中某个包含空格的路径中的一个文件:

QDesktopServices::openUrl(QUrl("file:/ //C:/Documents and Settings/All Users/Desktop", QUrl::TolerantMode));

如果指定的是一个 mailto  URL 的话,那么就会使用用户的电子邮件客户端来处理,它会打开一个编写窗口,其中会包含URL 中指定的那些选项。这一切与一个网页浏览器处理一个 mailto 链接的过程是何等的类似。

例如,下面的URL 中包含一个收件人( user@foo.com )、一个主题( Test )和一个邮件正文( Just a test ):

mailto:user@foo.com?subject=Test&body=Just a test

警告: 尽管很多邮件客户端都可以发送附件并且能识别Unicode,但是用户可能会在设置中取消这些特性。另外,某些邮件客户端(比如Lotus Notes)在处理长 URL时会有问题。

参考 setUrlHandler ()。

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands