PySide6.QtGui.QDesktopServices¶
- class QDesktopServices¶
QDesktopServices类提供了访问常见桌面服务的方法。更多…在版本4.2中添加。
概要¶
静态函数¶
def
openUrl()def
setUrlHandler()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
许多桌面环境提供了一些服务,这些服务可以被应用程序用来执行常见任务,例如以一致且考虑用户应用程序偏好的方式打开网页。
该类包含提供简单接口的函数,这些接口指示服务是否成功或失败。
openUrl()函数用于在外部应用程序中打开位于任意URL的文件。对于对应于本地文件系统上的资源的URL(URL方案为“file”),将使用合适的应用程序来打开文件;否则,将使用网页浏览器来获取并显示文件。用户的桌面设置控制某些可执行文件类型是用于浏览还是直接执行。一些桌面环境配置为防止用户执行从非本地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的代码片段,可能包含错误。
在用户桌面环境的适当Web浏览器中打开给定的
url,如果成功则返回true;否则返回false。如果URL是对本地文件的引用(即URL方案为“file”),那么它将使用合适的应用程序打开,而不是使用Web浏览器。
以下示例在Windows文件系统上打开一个路径中包含空格的文件:
QDesktopServices.openUrl(QUrl("file:///C:/Program Files", QUrl.TolerantMode))
如果指定了一个
mailtoURL,用户的电子邮件客户端将用于打开一个包含URL中指定选项的撰写窗口,类似于Web浏览器处理mailto链接的方式。例如,以下URL包含收件人(
user@foo.com)、主题(Test)和消息正文(Just a test):mailto:user@foo.com?subject=Testbody=Just a test
警告
尽管许多电子邮件客户端可以发送附件并且支持Unicode,但用户可能配置了他们的客户端而没有这些功能。此外,某些电子邮件客户端(例如,Lotus Notes)在处理长URL时存在问题。
警告
返回值为
true表示应用程序已成功请求操作系统在外部应用程序中打开URL。外部应用程序可能仍然无法启动或无法打开请求的URL。此结果不会报告回应用程序。警告
在iOS上传递给此函数的URL将不会加载,除非它们的方案列在应用程序的Info.plist文件的
LSApplicationQueriesSchemes键中。有关更多信息,请参阅Apple开发者文档中的canOpenURL:。例如,以下行启用了带有HTTPS方案的URL:<key>LSApplicationQueriesSchemes</key> <array> <string>https</string> </array>
注意
对于Android Nougat(SDK 24)及以上版本,使用
file方案的URL会通过FileProvider打开,它会首先尝试获取一个可共享的content方案URI。因此,Qt for Android定义了一个文件提供者,其权限为${applicationId}.qtprovider,其中applicationId是应用程序的包名,以避免名称冲突。更多信息,请参见设置文件共享。另请参阅
- static setUrlHandler(scheme, receiver, method)¶
- Parameters:
scheme – str
receiver –
QObjectmethod – str
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
将给定
scheme的处理程序设置为由receiver对象提供的处理程序method。此函数提供了一种自定义
openUrl()行为的方式。如果openUrl()被调用时带有指定scheme的URL,则会在receiver对象上调用给定的method,而不是由QDesktopServices启动外部应用程序。提供的方法必须实现为一个只接受单个QUrl参数的槽。
class MyHelpHandler(QObject): Q_OBJECT # public # ... # public slots def showHelp(url):
如果使用setUrlHandler()为已经存在处理程序的方案设置新的处理程序,现有的处理程序将简单地被新的处理程序替换。由于
QDesktopServices不拥有处理程序的所有权,因此在替换处理程序时不会删除任何对象。请注意,处理程序将始终从调用
openUrl()的同一线程中调用。在销毁处理程序对象之前,您必须调用
unsetUrlHandler(),以便处理程序对象的销毁不会与使用它的openUrl()的并发调用重叠。iOS 和 macOS¶
要在iOS/macOS上使用此函数从其他应用程序接收数据,您还需要将自定义方案添加到Info.plist文件中的
CFBundleURLSchemes列表中:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>myapp</string> </array> </dict> </array>
有关更多信息,请参阅Apple开发者文档中关于为您的应用定义自定义URL方案的部分。
警告
无法声明支持一些众所周知的URL方案,包括http和https。这仅适用于通用链接。
要声明支持http和https,Info.plist文件中的上述条目是不允许的。这只有在将您的域名添加到Entitlements文件中时才可能实现:
<key>com.apple.developer.associated-domains</key> <array> <string>applinks:your.domain.com</string> </array>
iOS/macOS 在应用程序安装时会在您的域名上搜索 /.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开发者文档中的支持关联域部分。
安卓¶
要在Android上使用此函数从其他应用程序接收数据,您需要在应用程序清单中的
activity添加一个或多个意图过滤器:<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-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)¶
- Parameters:
scheme – str
移除之前为指定的
scheme设置的URL处理程序。在注册用于
scheme的处理程序对象被销毁之前调用此函数,以防止并发的openUrl()调用继续调用已销毁的处理程序对象。另请参阅