ApplicationManager QML 类型

应用程序模型和控制台。 更多信息...

导入语句import QtApplicationManager.SystemUI 2.0

属性

信号

方法

详细描述

ApplicationManager 单例类型是应用程序管理器的核心。它为其所有功能提供 DBus 和 QML API。

该类型来源于 QAbstractListModel,因此可以直接用作 app-grid 视图中的模型。

此模型中可用的以下角色

角色名称类型描述
applicationIdstring应用程序的唯一 ID,表示为字符串(例如 Browsercom.pelagicore.music
namestring应用程序的名称。如果可能,已翻译为当前区域设置。
iconstring应用程序图标的 URL。
isRunningbool表示应用程序运行状态的一个布尔值。
isStartingUpbool一个布尔值,表示应用程序是否正在启动但尚未完全正常运行。
isShuttingDownbool一个布尔值,表示应用程序是否正在关闭。
isBlockedbool一个布尔值,当应用程序管理器需要阻止应用程序运行时被设置:这通常只在应用更新时发生。
isUpdatingbool一个布尔值,表示应用程序是否正在安装或更新。如果 true,则可以使用 updateProgress 来跟踪实际进度。
isRemovablebool一个布尔值,表示此应用程序是否可由用户删除;所有动态安装的第三方应用程序为 true,而所有系统应用程序为 false
updateProgressrealisUpdatingtrue 时,查询此角色返回实际的进度作为 0.01.0 范围内的浮点值。
codeFilePathstring主 "可执行文件" 的文件系统路径。此文件的格式取决于实际的运行时:对于 QML 应用程序,"可执行文件" 是 main.qml 文件。
categorieslist<string>通过其元数据文件注册的应用程序类别。
versionstring此应用程序当前安装的版本。
applicationApplicationObject用于快速访问模型代理之外的属性的底层 ApplicationObject
applicationObjectApplicationObjectapplication 完全相同。这被添加以保持 PackageManager 和 ApplicationManager 模型之间的角色名称尽可能相似。此角色在 Qt 版本 6.6 中引入。

注意:基于索引的 API 当前无法通过 DBus 获取。然而,基于 id 的 API 提供了相同的功能。

导入后,您可以使用以下方式使用 ApplicationManager 单例

import QtQuick
import QtApplicationManager.SystemUI

ListView {
    id: appList
    model: ApplicationManager

    delegate: Text {
        text: name + "(" + applicationId + ")"

        MouseArea {
            anchors.fill: parent
            onClick: ApplicationManager.startApplication(applicationId)
        }
    }
}

属性文档

containerSelectionFunction : var

这是一个JavaScript函数回调,当应用程序管理器需要为运行应用程序创建一个容器时会调用。有关更多信息,请参阅容器选择配置.


count : int [只读]

此属性保存可用的应用程序数量。


securityChecksEnabled : bool [只读]

此属性保存是否启用了安全相关检查。

另请参阅 无安全设置.


shuttingDown : bool [只读]

该属性用于在应用程序管理器进入关闭阶段时通知系统UI。新的应用程序启动已被阻止,但系统UI可能会在此状态下实施额外的限制。


singleProcess : bool [只读]

该属性指示应用程序管理器是处于单进程还是多进程模式。


systemProperties : var [只读]

返回通过配置文件设置的特定于项目的系统属性


windowManagerCompositorReady : bool [只读]

此属性的初始值为false,一旦Wayland合成器准备好接受来自其他进程的连接,则将其更改为true。在多进程模式下,当系统UI的主QML加载完毕后,此操作隐式执行。


信号文档

applicationAboutToBeRemoved(string id)

当通过PackageManager移除标识为id的现有应用程序时,会发出此信号。

注意:除了正常的“低级别”QAbstractListModel信号外,应用程序管理器还会为无法直接在ApplicationManager模型上工作的系统UI发出这些“高级”信号:applicationAdded,applicationAboutToBeRemoved和applicationChanged

注意:相应的处理程序是onApplicationAboutToBeRemoved


applicationAdded(string id)

在通过PackageManager安装标识为id的新应用程序后,会发出此信号。在发送此信号之前,模型已经更新。

注意:除了正常的“低级别”QAbstractListModel信号外,应用程序管理器还会为无法直接在ApplicationManager模型上工作的系统UI发出这些“高级”信号:applicationAdded,applicationAboutToBeRemovedapplicationChanged

注意:相应的处理程序是onApplicationAdded


applicationChanged(字符串 id列表<字符串> changedRoles)

当通过 id 识别的应用程序中的一个或多个数据角色(由 changedRoles 表示)发生变化时,会发出此信号。如果 changedRoles 的参数为空列表,则表示所有角色都被视为已修改。

注意:除了正常的“低级” QAbstractListModel 信号外,应用程序管理器还将发射针对不能直接在 ApplicationManager 模型上工作的系统用户界面(System UIs)的以下“高级”信号: applicationAddedapplicationAboutToBeRemoved 和 applicationChanged。

注意:相应的处理器是 onApplicationChanged


applicationRunStateChanged(字符串 id枚举 runState)

当通过 id 识别的应用程序的 runState 发生变化时,会发出此信号。runState 的可能值由 ApplicationObject 类型定义。

例如,此信号可以用于在多进程模式下重新启动已崩溃的应用程序。

Connections {
    target: ApplicationManager
    function onApplicationRunStateChanged() {
        if (runState === Am.NotRunning
            && ApplicationManager.application(id).lastExitStatus === Am.CrashExit) {
            ApplicationManager.startApplication(id);
        }
    }
}

另请参阅 Application::runState

注意:相应的处理器是 onApplicationRunStateChanged


applicationWasActivated(字符串 id字符串 aliasId)

当通过 ApplicationManager API(可能通过 aliasId 中提供的别名)以 id 识别的应用程序(重新)启动时,会发出此信号。

在这种情况下,窗口管理器应负责提升应用程序的窗口。

注意:相应的处理器是 onApplicationWasActivated


openUrlRequested(字符串 requestId字符串 url字符串 mimeType列表<字符串> possibleAppIds)

当应用程序管理器被请求打开一个 URL 时,会发出此信号。这可以通过以下方式发生:

  • 在一个应用程序中调用 Qt.openUrlExternally,
  • 在系统用户界面中调用 Qt.openUrlExternally,
  • 在系统用户界面中调用 ApplicationManager::openUrl
  • 通过 D-Bus 使用 io.qt.ApplicationManager.openUrl

注意:只有当存在任何接收者时,才会发射此信号 - 有关后备行为,请参阅 openUrl

此信号的接收者可以检查请求的 url 和它的 mimeType。然后可以通过调用 acknowledgeOpenUrlRequest 从提供的 possibleAppIds 中选择一个,或者通过调用 rejectOpenUrlRequest 来忽略请求。无论在哪种情况下,都需要发送独特的 requestId 来标识请求。不调用这两个函数之一将导致内存泄漏。

注意:相应的处理器是 onOpenUrlRequested

另请参阅 openUrlacknowledgeOpenUrlRequestrejectOpenUrlRequest


方法文档

acknowledgeOpenUrlRequest(string requestId, string appId)

告诉应用管理器继续处理打开URL的请求,该请求由requestId标识。选择的appId必须是提供给openUrlRequested信号接收者的possibleAppIds之一。

另请参阅:openUrlopenUrlRequested


ApplicationObject application(int index)

返回与给定模型中索引index对应的应用程序,如果索引无效则返回null

注意:返回的应用程序对象的托管权属于应用管理器。如果您想存储此指针,可以使用ApplicationManagerQAbstractListModel信号或applicationAboutToBeRemoved信号来通知对象在C++端即将被删除。


ApplicationObject application(string id)

返回与给定应用程序id对应的应用程序,如果id不存在则返回null

注意:返回的应用程序对象的托管权属于应用管理器。如果您想存储此指针,可以使用ApplicationManagerQAbstractListModel信号或applicationAboutToBeRemoved信号来通知对象在C++端即将被删除。


list<string> applicationIds()

返回所有可用应用程序id的列表。这可以用于通过get()进一步查询特定信息。


list<string> capabilities(string id)

返回由用户授予由id标识的应用程序的所有能力的列表。如果应用程序id无效,则返回空列表。


bool debugApplication(string id, string debugWrapper, string document)

指示应用管理器启动由其唯一的id标识的应用程序,就像startApplication。尽管通过给定的debugWrapper启动应用程序。可选参数document将原样传递给应用程序 - 通常用于引用要显示的文档。

返回一个指示成功与否的bool值。有关更多信息,请参阅ApplicationManager::startApplication的完整文档。

有关如何设置和使用这些调试包装器的更多信息,请参阅调试页面。

另请参阅:ApplicationObject::debug


对象 get(int index)

检索在index处的模型数据,以其作为一个JavaScript对象。请参阅角色名称以获取预期的对象字段。

如果指定的index无效,则返回一个空对象。

注意:如果您只想从QML访问单个属性,这将非常低效;请使用application()来直接访问应用程序对象的属性。


对象 get(string id)

检索通过id识别的应用程序的模型数据,以作为一个JavaScript对象。请参阅角色名称以获取预期的对象字段。

如果指定的id无效,则返回一个空对象。


列表<string> identifyAllApplications(int pid)

验证以进程标识符pid运行的进程是否为应用程序管理器启动的进程。

如果在同一容器进程中运行多个应用程序,该函数将返回所有这些应用程序id。

成功时返回一个包含应用id的列表,或者在失败时返回一个空列表。


字符串 identifyApplication(int pid)

验证以进程标识符pid运行的进程是否为应用程序管理器启动的进程。

注意:如果在同一容器进程中运行多个应用程序,该函数将只返回第一个匹配的应用程序。有关检索所有应用程序id的方法,请参阅identifyAllApplications()。

成功时返回应用程序的id,或者在失败时返回一个空字符串。


int indexOfApplication(ApplicationObject application)

application映射到模型中的位置。如果指定的应用程序无效,则返回-1


int indexOfApplication(string id)

将给定id的应用程序映射到模型中的位置。如果指定的id无效,则返回-1


bool openUrl(string url)

尝试启动能够处理url的应用程序。首先,应用程序管理器会查看URL的方案

  • 如果它为file:,则会咨询操作系统的MIME数据库,尝试根据文件扩展名或文件内容找到匹配的MIME类型。如果成功,应用程序管理器将使用这种MIME类型来查找其所有声明支持该MIME类型的应用程序(参见应用程序清单中的mimeTypes字段)。一个可以处理mp3wav文件的音乐播放器应用程序可以将此添加到其清单中
    mimeTypes: [ 'audio/mpeg', 'audio/wav' ]
  • 如果它不是file:,应用程序管理器将查询其内部数据库,该数据库包含声明支持匹配的x-scheme-handler/... MIME类型的应用程序。为了使您的网络浏览器应用程序处理http:https: URL,您需要在应用程序清单中包含此信息。
    mimeTypes: [ 'x-scheme-handler/http', 'x-scheme-handler/https' ]

如果至少有一个可能的匹配项,则取决于在系统UI中连接了信号openUrlRequested():如果信号未连接,则将启动匹配集合中的一个任意应用程序。否则,应用程序管理器将发出信号openUrlRequested并返回true。选择一个可能的应用程序或完全拒绝请求的责任在于信号的接收者通过对acknowledgeOpenUrlRequest或通过调用rejectOpenUrlRequest拒绝请求来实现。不调用这两个函数之一将导致内存泄漏。

如果应用程序通过这两种机制之一启动,则将url作为文档供给应用程序以通过其ApplicationInterface打开。

如果数据库中找到匹配项,则返回true,否则返回false

另请参阅openUrlRequestedacknowledgeOpenUrlRequestrejectOpenUrlRequest


rejectOpenUrlRequest(string requestId)

通知应用程序管理器忽略由requestId标识的打开URL的请求。

另请参阅:openUrlopenUrlRequested


bool startApplication(string id, string document)

指示应用程序管理器启动通过其唯一id标识的应用程序。可选参数document将按照原样供给应用程序 - 最常见的用途是引用要显示的文档。如果应用程序id有效,并且应用程序管理器能够启动运行时插件,则返回true。否则返回false。请注意,尽管此调用可能表示成功,但应用程序仍可能稍后未能正确启动,因为运行时插件的实际启动过程可能是异步的。

另请参阅ApplicationObject::start


stopAllApplications(bool forceKill)

通知应用程序管理器停止所有正在运行的应用程序。参数forceKill的意义在运行时是相关的,但通常您应首先尝试将forceKill设置为false来停止应用程序,以允许干净的关闭。仅当作为最后手段才能杀死挂起的应用程序时,才使用将forceKill设置为true

另请参阅stopApplication


stopApplication(string id, bool forceKill)

告诉应用管理器停止通过唯一 id 识别的应用程序。 forceKill 参数的含义取决于运行时,但通常您应首先尝试将 forceKill 设置为 false 来停止应用程序,以允许干净地关闭。只有在作为最后手段时才将 forceKill 设置为 true 以杀死挂起的应用程序。

支持 ApplicationInterface 的 QML 应用程序和本地应用程序将通过 ApplicationInterface::quit() 通知。所有其他应用程序将发送 Unix TERM 信号。

另请参阅 ApplicationObject::stop 方法。


© 2024 Qt 公司。本文件中包含的文档贡献是各自所有者的版权。所提供的文档根据 Free Software Foundation 发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 及其 respective 图标是芬兰及其他国家/地区的 Qt 公司的 商标。所有其他商标都属于其各自所有者。