窗口管理器 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 window, string name, var value)
方法
- object addExtension(Component component)
- object get(int index)
- int indexOfWindow(WindowObject window)
- bool makeScreenshot(string filename, string selector)
- WindowObject window(int index)
- list<WindowObject> windowsOfApplication(string applicationId)
详细描述
窗口管理器单例类型是应用程序管理器的窗口管理部分。它仅提供 QML API。
该类型继承自QAbstractListModel,可以直接在窗口视图中用作模型。
该模型中的每个项目都对应一个实际的窗口表面。请注意,单个应用程序可以有多个表面;因此,此模型中的 applicationId
角色不唯一。
此模型中可用以下角色
角色名称 | 类型 | 描述 |
---|---|---|
applicationId | string | 表示为字符串的应用程序的唯一 ID。这可用于在 ApplicationManager 模型中查找有关应用程序的信息。 |
window | WindowObject | 包含客户端界面的WindowObject。要显示它,您必须将其放入一个WindowItem |
WindowObject | WindowObject | 与window 完全相同。这是为了使PackageManager和WindowManager模型之间的角色名称尽可能相似。此角色是在Qt版本6.6中引入的。 |
contentState | WindowObject::ContentState | WindowObject的内容状态。请参阅WindowObject::contentState |
注意:请注意,Wayland本质上是一个异步IPC协议,会导致状态更改时客户端和服务器进程中有不同的本地状态。这的一个主要例子是客户端的窗口属性更改:除了在服务器端异步更改外,如果在尚未通过windowAdded信号在服务器端使窗口对象可用,则不会发射windowPropertyChanged信号。然而,所有这些更改都没有丢失,但在发射windowAdded信号之前的最后更改将是系统UI端窗口对象的初始状态。
导入之后,可以使用以下示例使用WindowManager单例。它演示了如何实现一个支持窗口显示和隐藏动画的基本、全屏窗口合成器
import QtQuick import QtApplicationManager.SystemUI // 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) |
在从模型中删除window之前发射此信号。例如,当在应用程序侧将窗口的visible
属性设置为false
时,会发生这种情况。
注意:对应的处理程序是onWindowAboutToBeRemoved
。
windowAdded(WindowObject window) |
当将新的WindowObject添加到模型时,将发射此信号。这发生在响应应用程序创建新的窗口表面时,通常在应用程序的启动过程中发生。
要将此window显示在您的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。该component必须持有一个有效的Wayland组合器扩展。在多进程模式下成功执行时,函数返回创建的扩展。扩展只能添加一次,例如在ApplicationManager::windowManagerCompositorReady为真的情况下。
import QtWayland.Compositor.TextureSharingExtension 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>
所有部分都是可选的,因此如果您指定一个空字符串,将创建每个屏幕的截图。如果您指定了一个应用程序-id
(这也可以包含匹配多个应用程序的通配符),将为该(这些)应用程序的每个窗口制作截图。如果只使用一个或多个应用程序的特定窗口来创建截图,您可以指定一个窗口属性
选择器,它将只选择具有匹配的WindowManager::windowProperty的窗口。添加一个屏幕-id
将限制截屏的创建到指定的屏幕。
以下是一个示例,创建第第二个屏幕上所有窗口的截图,这些窗口的窗口属性type
设置为cluster
,并由Pelagicore编写。
com.pelagicore.*[type=cluster]:1
在成功时返回true
,否则返回false
。
注意:此调用将异步处理,因此即使返回值是正的,也不意味着所有截图图像都已创建。
返回与模型中给定的index对应的窗口,如果索引无效则返回null
。
注意:返回的Window对象的所有权属于应用程序管理器。如果您想保存此指针,可以使用WindowManager的QAbstractListModel信号或windowAboutToBeRemoved信号来在C++侧收到对象即将被删除的通知。
返回属于模型中给定applicationId的窗口列表,如果applicationId无效则返回空列表。
注意:返回的Window对象的所有权属于应用程序管理器。如果您想保存这些指针,可以使用WindowManager的QAbstractListModel信号或windowAboutToBeRemoved信号来在C++侧收到对象即将被删除的通知。
© 2024 Qt公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据由自由软件基金会发布的