- class QDesktopServices#
该
QDesktopServices
类提供了访问常见桌面服务的方法。了解更多...自版本 4.2 开始。
概述#
静态函数#
def
openUrl()
def
setUrlHandler()
注意事项
本文档可能包含从C++自动转换为Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,您也可以在https:/bugreports.qt.io/projects/PYSIDE上创建工单告诉我们。
详细描述#
警告
本节包含从C++自动转换为Python的代码片段,可能包含错误。
许多桌面环境提供了应用程序可以用来执行常规任务的服务,例如在保持一致的同时考虑用户的程序偏好方式打开网页。
该类包含用于访问这些服务的函数,它们提供简单的接口来指示操作是否成功或失败。
openUrl()
函数用于打开位于任意URL的文件,在外部应用程序中打开。对于对应于本地文件系统上资源(URL方案为“file”)的URL,将使用合适的应用程序打开文件;否则,将使用网络浏览器来获取并显示文件。用户的桌面设置控制是否打开某些可执行文件类型进行浏览,或者是否执行它们。某些桌面环境配置为防止用户执行从非本地URL获得的文件,或者在进行之前询问用户的许可。
URL处理器#
可以对
openUrl()
函数的行为进行自定义,针对单个URL方案,允许应用程序覆盖某些类型URL的默认处理行为。分发机制仅允许为每个URL方案使用一个自定义处理程序;这是通过
setUrlHandler()
函数设置的。每个处理程序都被实现为一个槽,它只接受一个QUrl参数。可以使用
unsetUrlHandler()
函数移除每个方案中现有的处理程序。这将返回给定的方案的默认处理行为。该系统简化了帮助系统的实现。例如,可以使用help://myapplication/mytopic URL在标签和文本浏览器中提供帮助,并通过注册处理程序在应用程序内显示帮助文本。
class MyHelpHandler(QObject): Q_OBJECT # public # ... # public slots def showHelp(url): QDesktopServices.setUrlHandler("help", helpInstance, "showHelp")
如果在处理程序内决定无法打开请求的URL,则可以再次以相同参数调用
openUrl()
,它将尝试使用用户桌面环境适当机制打开URL。与平台特定设置结合使用,
openUrl()
函数注册的方案也可以提供给其他应用程序,从而为应用程序深度链接或最基本的基于URL的IPC机制打开空间。另请参见
QSystemTrayIconQProcessQStandardPaths
警告
本节包含从C++自动转换为Python的代码片段,可能包含错误。
在用户桌面环境的适当浏览器中打开给定的
url
,如果成功则返回true
;否则返回false
。如果URL是指向本地文件的引用(即,URL方案是“file”),则它将使用适当的应用程序打开,而不是Web浏览器。
以下示例在包含空格的路径上打开Windows文件系统中的一个文件:
QDesktopServices.openUrl(QUrl("file:///C:/Program Files", QUrl.TolerantMode))
如果指定了一个
mailto
URL,则将使用用户的电子邮件客户端打开一个包含URL中指定选项的作曲窗体,类似于Web浏览器处理mailto
链接的方式。例如,以下URL包含一个收件人(
[email protected]
)、一个主题(Test
)和一个消息正文(Just a test
)mailto:[email protected]?subject=Testbody=Just a test
警告
尽管许多电子邮件客户端可以发送附件且支持Unicode,但用户可能已经配置其客户端而没有这些特性。此外,某些电子邮件客户端(例如,Lotus Notes)可能会遇到长URL的问题。
警告
返回值
true
表示应用程序已成功请求操作系统在外部应用程序中打开 URL。外部应用程序可能仍然无法启动或无法打开请求的 URL。此结果将不会报告给应用程序。警告
传递给此函数的 iOS 上的 URL 除非它们的方案列在应用程序的 Info.plist 文件中的
LSApplicationQueriesSchemes
键中,否则不会加载。有关更多信息,请参阅 canOpenURL: 的 Apple 开发者文档。例如,以下行启用了具有 HTTPS 方案的 URL<key>LSApplicationQueriesSchemes</key> <array> <string>https</string> </array>
注意事项
对于 Android Nougat (SDK 24) 及以上版本,使用 FileProvider 来打开具有
file
方案的 URL,它首先尝试获取可共享的content
方案 URI。因此,Qt for Android 定义了一个具有权威${applicationId}.qtprovider
的文件提供器,其中applicationId
是应用程序的包名,以避免名称冲突。有关更多信息,请参阅设置文件共享。另请参见
警告
本节包含从C++自动转换为Python的代码片段,可能包含错误。
将给定
scheme
的处理器设置为receiver
对象提供的处理器method
。此函数提供了一种自定义
openUrl()
行为的方法。如果使用具有指定scheme
的 URL 调用openUrl()
,则将调用receiver
对象上的给定method
,而不是QDesktopServices
启动外部应用程序。提供的方法必须实现为仅接受单个 QUrl 参数的槽。
class MyHelpHandler(QObject): Q_OBJECT # public # ... # public slots def showHelp(url):
如果使用 setUrlHandler() 设置已有处理器的方案的新处理器,则现有处理器将被简单地替换为新处理器。由于
QDesktopServices
不拥有处理器,在替换处理器时不会删除任何对象。请注意,处理器将从调用
openUrl()
的同一线程中调用。在被销毁处理对象之前,必须调用
unsetUrlHandler()
,以避免处理对象的销毁与使用它的openUrl()
竞态调用重叠。iOS#
要使用此函数在iOS上从其他应用接收数据,你还需要将自定义方案添加到你的Info.plist文件中的
CFBundleURLSchemes
列表中。<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>myapp</string> </array> </dict> </array>
有关更多信息,请参阅Apple开发者为定义应用的Custom URL Scheme提供的开发者文档。
警告
不可以声明支持某些知名URL方案,包括http和https。这仅适用于Universal Links。
要声明支持http和https,Info.plist文件中的上述条目不允许。这只能在将你的域名添加到Entitlements文件中时才可能。
<key>com.apple.developer.associated-domains</key> <array> <string>applinks:your.domain.com</string> </array>
当应用被安装时,iOS将在你的域上搜索
/.well-known/apple-app-site-association
。如果你想监听https://your.domain.com/help?topic=ABCDEF
,你需要在此处提供以下内容"applinks": { "apps": [], "details": [{ "appIDs" : [ "ABCDE12345.com.example.app" ], "components": [{ "/": "/help", "?": { "topic": "?*"} }] }]
有关更多信息,请参阅Apple开发者为支持Associated Domains提供的开发者文档。
Android#
要使用此函数在Android上从其他应用接收数据,你需要在应用程序的清单中添加一个或多个
activity
intent过滤器。<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="your.domain.com" android:port="1337" android:path="/help"/> </intent-filter>
有关更多信息,请参阅Android开发者为创建指向应用内容的深度链接提供的开发者文档。
为了在用户无需选择应用的情况下立即打开你的Android应用中的相应内容,你需要验证你的链接。要启用验证,请在intent过滤器中添加一个额外的参数。
<intent-filter android:autoVerify="True">
当应用被安装时,Android将搜索
https://your.domain.com/.well-known/assetlinks.json
。如果你想监听https://your.domain.com:1337/help
,你在此处需要提供以下内容。[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] }]
有关更多信息,请参阅Android开发者为验证Android应用链接提供的开发者文档。
- static unsetUrlHandler(scheme)#
- 参数:
– str
为指定的
scheme
删除已设置的URL处理程序。在销毁为
scheme
注册的处理程序对象之前调用此函数,以防止并行openUrl()
调用继续调用已销毁的处理程序对象。另请参见