WindowManager QML类型
窗口模型和控制器。 更多...
导入语句 | import QtApplicationManager.SystemUI 2.0 |
属性
- count : int
- runningOnDesktop : bool
- slowAnimations : bool
信号
- raiseApplicationWindow(string applicationId)
- windowAboutToBeRemoved(WindowObject window)
- windowAdded(WindowObject window)
- windowContentStateChanged(WindowObject window)
- windowPropertyChanged(WindowObject 窗口, string name, var value)
方法
- object addExtension(Component component)
- object get(int index)
- int indexOfWindow(WindowObject 窗口)
- bool makeScreenshot(string filename, string selector)
- WindowObject window(int index)
- list<WindowObject> windowsOfApplication(string applicationId)
详细描述
WindowManager单例类型是应用程序管理器中的窗口管理部分。它仅提供QML API。
该类型从QAbstractListModel派生,可以直接作为窗口视图中使用的模型。
此模型中的每个项对应一个实际窗口表面。请注意,单个应用程序可以拥有多个表面;因此,在此模型中,applicationId
角色不是唯一的。
此模型中提供了以下角色
角色名称 | 类型 | 描述 |
---|---|---|
applicationId | string | 以字符串表示的应用程序的唯一ID。这可以用于在ApplicationManager模型中查找有关应用程序的信息。 |
window | WindowObject | 包含客户端表面的WindowObject。要显示它,您必须将其放入WindowItem |
contentState | WindowObject::ContentState | 《windowmanager-contentstate` |
注意:请知晓Wayland本质上是一个异步IPC协议,因此在进行状态变化时,客户端和服务器进程的速度会有所不同。一个主要的例证是在客户端窗口属性的变化:除了服务器端异步更改外,当窗口对象没有通过windowAdded信号在服务器端引起时,windowPropertyChanged信号将不会发出。然而,所有的这些更改都不会丢失,但是在发出windowAdded信号之前的最后更改将是系统UI侧窗口对象的初始状态。
导入后,可以根据以下示例使用WindowManager单例。它演示了如何实现一个支持窗口开启和关闭动画的基本、全屏窗口合成器。
import QtQuick 2.10 import QtApplicationManager.SystemUI 2.0 // Simple solution for a full-screen setup Item { width: 1024 height: 640 Connections { target: WindowManager // Send windows to a separate model so that we have control // over removals and ordering function onWindowAdded(window) { windowsModel.append({"window":window}); } } Repeater { model: ListModel { id: windowsModel } delegate: WindowItem { id: windowItem anchors.fill: parent z: model.index window: model.window states: [ State { name: "open" when: model.window.contentState === WindowObject.SurfaceWithContent PropertyChanges { target: windowItem; scale: 1; visible: true } } ] scale: 0.50 visible: false transitions: [ Transition { to: "open" NumberAnimation { target: windowItem; property: "scale" duration: 500; easing.type: Easing.OutQuad } }, Transition { from: "open" SequentialAnimation { // we wanna see the window during the closing animation PropertyAction { target: windowItem; property: "visible"; value: true } NumberAnimation { target: windowItem; property: "scale" duration: 500; easing.type: Easing.InQuad } ScriptAction { script: { // It's important to destroy our WindowItem once it's no longer needed in // order to free up resources if (model.window.contentState === WindowObject.NoSurface) windowsModel.remove(model.index, 1); } } } } ] } } }
属性文档
[只读] count : int |
此属性保存可用应用程序的数量。
[只读] runningOnDesktop : bool |
如果运行在经典桌面窗口管理器(Windows、X11或macOS)上,则为true
,否则为false
。
slowAnimations : bool |
动画是否在慢速模式下。
默认为false,可能通过命令行选项--slow-animations
初始化为true。
在需要调整慢速动画模式的定时器时也很有用。
信号文档
raiseApplicationWindow(string applicationId) |
当通过ApplicationManager启动已运行的由applicationId标识的应用程序时,将发出此信号。
注意:相应处理器是onRaiseApplicationWindow
。
windowAboutToBeRemoved(WindowObject window) |
在将从窗口移除到模型之前发出此信号。例如,当在应用程序一边将窗口的visible
属性设置为false
时,就会发生这种情况。
注意:相应处理器是onWindowAboutToBeRemoved
。
windowAdded(WindowObject window) |
当向模型添加新的WindowObject时,将发出此信号。这通常会在应用程序启动期间发生,当一个应用程序创建一个新的窗口表面时。
要在您的QML场景中显示该窗口,您需要将其分配给一个WindowItem。
注意:请知晓当客户端设置窗口为可见时,不会立即发出windowAdded信号。这是由于底层Wayland协议的异步性
所致。
注意:相应处理器是onWindowAdded
。
windowContentStateChanged(WindowObject window) |
当指定窗口的 WindowObject::contentState 改变时,会发出此信号。
注意:相应的处理程序是 onWindowContentStateChanged
。
windowPropertyChanged(WindowObject window, string name, var value) |
报告应用窗口的属性变更,其中属性通过 name 标识并修改为 value。
注意:当监听 Wayland 客户端的属性变更时,注意底层 Wayland 协议的 异步特性。
注意:相应的处理程序是 onWindowPropertyChanged
。
方法说明
object addExtension(Component component) |
从 component 创建一个 Wayland 合成器扩展,并将其添加到 System UI 的底层 WaylandCompositor。组件必须是有效的 Wayland 合成器扩展。如果成功,在多进程模式下,函数返回创建的扩展。一旦 ApplicationManager::windowManagerCompositorReady 为真,扩展就可以添加,例如
import QtWayland.Compositor.TextureSharingExtension 1.0 Component { id: texshare TextureSharingExtension {} } Connections { target: ApplicationManager function onWindowManagerCompositorReadyChanged() { WindowManager.addExtension(texshare); } }
int indexOfWindow(WindowObject window) |
返回窗口在 WindowManager 模型中的索引,如果不是受管理的窗口项,则返回 -1
。
根据 selector 的内容创建一个或多个截图,并将其保存到由 filename 指定的文件中。
filename 参数可以是单个截图的普通文件名,也可以包含要替换的格式序列,如果请求多个截图,则将相应地替换这些序列
格式 | 描述 |
---|---|
%s | 将被替换为特定截图的屏幕 ID。 |
%i | 在制作应用程序窗口的截图时,将被替换为应用程序 ID。 |
%% | 将被替换为一个单独的反斜杠 % 字符。 |
selector 参数是一个字符串,其解析方式如下
<application-id>[window-property=value]:<screen-id>
所有部分都是可选的,因此如果指定一个空字符串,调用将会为每个屏幕创建截图。如果指定了一个 application-id
(也可以包含匹配多个应用的通配符),将会为这个(这些)应用中的每个窗口创建截图。如果只应该使用一个或多个应用的特定窗口来创建截图,你可以指定一个 window-property
选择器,这将只选择具有匹配 WindowManager::windowProperty 的窗口。添加一个 screen-id
会使截图的创建仅限于指定的屏幕。
以下是一个示例,创建第二屏幕上具有窗口属性 type
设置为 cluster
且由 Pelagicore 编写的所有窗口的截图。
com.pelagicore.*[type=cluster]:1
成功时返回 true
,否则返回 false
。
注意:此调用将是异步处理的,所以即使返回值是积极的,也不意味着所有的截图图像都已经创建好了。
WindowObject window(int index) |
返回对应给定的 index 的模型中的 window 或者在索引无效时返回 null
。
注意:返回的 Window 对象的所有权属于应用管理器。如果你想要存储此指针,可以使用WindowManager的QAbstractListModel信号或windowAboutToBeRemoved信号来通知你,如果对象即将在 C++ 端被删除。
list<WindowObject> windowsOfApplication(string applicationId) |
返回属于给定 applicationId 的模型中的windows列表,如果应用id无效则返回空列表。
注意:返回的 Window 对象的所有权属于应用管理器。如果你想要存储这些指针,可以使用WindowManager的QAbstractListModel信号或windowAboutToBeRemoved信号来通知你,如果对象即将在 C++ 端被删除。
©2019 Luxoft Sweden AB。本文件中包含的文档贡献为其各自所有者的版权。本提供的文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可。Qt及其相关标志是芬兰和/或其他国家及地区的Qt公司有限责任公司的商标。所有其他商标均为其各自所有者的财产。