PySide6.QtQuickWidgets.QQuickWidget¶
- class QQuickWidget¶
QQuickWidget类提供了一个用于显示 Qt Quick 用户界面的部件。更多…概要¶
属性¶
resizeModeᅟ- 确定视图是否应调整窗口内容的大小sourceᅟ- QML组件的源URL
方法¶
def
__init__()def
engine()def
errors()def
format()def
initialSize()def
quickWindow()def
resizeMode()def
rootContext()def
rootObject()def
setClearColor()def
setFormat()def
setResizeMode()def
source()def
status()
插槽¶
def
setContent()def
setSource()
信号¶
def
statusChanged()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
这是
QQuickWindow的一个便捷封装,当给定主源文件的URL时,它将自动加载并显示QML场景。或者,您可以使用QQmlComponent实例化您自己的对象,并将它们放置在手动设置的QQuickWidget中。典型用法:
QQuickWidget *view = new QQuickWidget; view->setSource(QUrl::fromLocalFile("myqmlfile.qml")); view->show();
要接收与使用
QQuickWidget加载和执行QML相关的错误,您可以连接到statusChanged()信号并监控Error。错误可以通过errors()获取。QQuickWidget还管理视图和根对象的大小调整。默认情况下,resizeMode是SizeViewToRootObject,它将加载组件并将其大小调整为视图的大小。或者,resizeMode可以设置为SizeRootObjectToView,这将调整视图的大小以适应根对象的大小。性能考虑¶
QQuickWidget是使用QQuickView和 QWidget::createWindowContainer() 的替代方案。堆叠顺序的限制不适用,使得QQuickWidget成为更灵活的替代方案,表现得更像一个普通的部件。然而,上述优势是以性能为代价的:
与
QQuickWindow和QQuickView不同,QQuickWidget至少涉及一次额外的渲染过程,目标是离屏颜色缓冲区,通常是2D纹理,然后绘制纹理四边形。这意味着增加了负载,特别是对于GPU的片段处理。使用
QQuickWidget会禁用所有平台上的 线程渲染循环。这意味着线程渲染的一些优势,例如 Animator 类和 vsync 驱动的动画,将不可用。
注意
避免在
QQuickWidget上调用winId()。此函数会触发创建本地窗口,导致性能下降并可能引发渲染问题。QQuickWidget的整个目的是在没有单独本地窗口的情况下渲染Quick场景,因此应始终避免使其成为本地小部件。图形API支持¶
QQuickWidget可以与 Qt Quick 支持的所有 3D 图形 API 以及software后端一起使用。然而,其他后端(例如 OpenVG)不兼容,尝试构建QQuickWidget会导致问题。覆盖平台的默认图形API的方式与
QQuickWindow和QQuickView相同:要么在构建第一个QQuickWidget之前尽早调用setGraphicsApi(),要么设置QSG_RHI_BACKEND环境变量。注意
一个顶级窗口只能使用一个图形API进行渲染。例如,尝试在同一个顶级窗口的小部件层次结构中放置一个使用Vulkan的
QQuickWidget和一个QOpenGLWidget,将会出现问题,其中一个部件将无法按预期渲染。场景图和上下文持久性¶
QQuickWidget遵循isPersistentSceneGraph(),这意味着应用程序可以通过在从quickWindow()函数返回的窗口上调用setPersistentSceneGraph()来决定是否在小部件隐藏时释放场景图节点和其他与 Qt Quick 场景相关的资源。默认情况下,持久性是启用的,就像QQuickWindow一样。在使用OpenGL运行时,
QQuickWindow提供了禁用持久化OpenGL上下文的选项。此设置目前被QQuickWidget忽略,上下文始终是持久化的。因此,当隐藏小部件时,OpenGL上下文不会被销毁。上下文仅在小部件被销毁或小部件被重新父级到另一个顶级小部件的子层次结构中时才会被销毁。然而,一些应用程序,特别是那些由于在Qt Quick场景中执行自定义OpenGL渲染而拥有自己的图形资源的应用程序,可能希望禁用后者,因为它们可能没有准备好处理将QQuickWidget移动到另一个窗口时上下文的丢失。此类应用程序可以设置QCoreApplication::AA_ShareOpenGLContexts属性。有关资源初始化和清理的详细信息,请参阅QOpenGLWidget文档。注意
QQuickWidget提供的对其内部 OpenGL 上下文的控制不如 QOpenGLWidget 精细,并且存在一些细微的差异,最显著的是,禁用持久场景图将导致在窗口更改时销毁上下文,无论是否存在 QCoreApplication::AA_ShareOpenGLContexts。限制¶
将其他小部件放在下面并使
QQuickWidget透明不会达到预期的效果:下面的小部件将不可见。这是因为实际上QQuickWidget在所有其他常规的非OpenGL小部件之前绘制,因此透明的解决方案是不可行的。其他类型的布局,如在QQuickWidget上面放置小部件,将按预期工作。在绝对必要时,可以通过在
QQuickWidget上设置Qt::WA_AlwaysStackOnTop属性来克服此限制。但请注意,这会破坏堆叠顺序。例如,将无法在其他小部件之上放置QQuickWidget,因此应仅在需要半透明的QQuickWidget且下方可见其他小部件的情况下使用。此限制仅适用于同一窗口内
QQuickWidget下方有其他小部件的情况。使窗口半透明,并在背景中显示其他应用程序和桌面,是通过传统方式完成的:在顶层窗口上设置Qt::WA_TranslucentBackground,请求一个alpha通道,并通过setClearColor()将Qt Quick Scenegraph的清除颜色更改为Qt::transparent。Tab键处理¶
按下
[TAB]键时,QQuickWidget内的项目会获得焦点。如果该项目能够处理[TAB]键按下,焦点将在项目内相应改变,否则焦点链中的下一个部件将获得焦点。另请参阅
Qt Quick 小部件示例
QQuickView- class ResizeMode¶
此枚举指定如何调整视图的大小。
常量
描述
QQuickWidget.SizeViewToRootObject
视图会随着QML中的根项目调整大小。
QQuickWidget.SizeRootObjectToView
视图将自动调整根项目的大小以适应视图的大小。
- class Status¶
指定
QQuickWidget的加载状态。常量
描述
QQuickWidget.Null
这个
QQuickWidget没有设置源。QQuickWidget.Ready
这个
QQuickWidget已经加载并创建了 QML 组件。QQuickWidget.Loading
这个
QQuickWidget正在加载网络数据。QQuickWidget.Error
发生了一个或多个错误。调用
errors()以检索错误列表。
注意
当使用
from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。- property resizeModeᅟ: QQuickWidget.ResizeMode¶
此属性决定视图是否应调整窗口内容的大小。
如果此属性设置为
SizeViewToRootObject(默认值),视图将调整为 QML 中根项目的大小。如果此属性设置为
SizeRootObjectToView,视图将自动调整根项目的大小以适应视图的大小。无论此属性如何,视图的 sizeHint 是根项目的初始大小。但请注意,由于 QML 可能会动态加载,该大小可能会发生变化。
另请参阅
- Access functions:
此属性保存QML组件源的URL。
确保提供的URL是完整且正确的,特别是从本地文件系统加载文件时,使用QUrl::fromLocalFile()。
注意
设置源URL将导致QML组件被实例化,即使URL与当前值相比没有变化。
- Access functions:
- property statusᅟ: QQuickWidget.Status¶
组件的当前
status。- Access functions:
构造一个
QQuickWidget,使用默认的QML引擎作为parent的子对象。parent的默认值是nullptr。- __init__(engine, parent)
- Parameters:
engine –
QQmlEngineparent –
QWidget
使用给定的QML
engine作为parent的子项构造一个QQuickWidget。注意
QQuickWidget不会接管给定的engine对象的所有权;销毁引擎是调用者的责任。如果engine在视图之前被删除,status()将返回Error。使用默认的QML引擎和给定的QML
source作为parent的子项构造一个QQuickWidget。parent的默认值是nullptr。- engine()¶
- Return type:
返回一个指向用于实例化QML组件的QQmlEngine的指针。
返回上次编译或创建操作期间发生的错误列表。当状态不是
Error时,返回一个空列表。另请参阅
- format()¶
- Return type:
返回实际的表面格式。
如果小部件尚未显示,则返回请求的格式。
另请参阅
渲染一个帧并将其读回为图像。
注意
这是一个可能代价高昂的操作。
返回根对象的初始大小。
如果
resizeMode是SizeRootObjectToView,根对象将被调整到视图的大小。此函数返回调整大小前根对象的大小。- quickWindow()¶
- Return type:
返回此小部件用于驱动Qt Quick渲染的离屏
QQuickWindow。如果您想使用QQuickWidget当前未公开的QQuickWindowAPI,例如连接到beforeRendering()信号以便在Qt Quick自己的渲染下方绘制原生OpenGL内容,这将非常有用。警告
请谨慎使用此函数的返回值。特别是,切勿尝试显示
QQuickWindow,并且在使用其他仅限QWindow的API时要非常小心。警告
在
QQuickWidget的生命周期内,离屏窗口可能会被删除(并重新创建),特别是当小部件移动到另一个QQuickWindow时。如果你需要知道窗口何时被替换,请连接到它的destroyed()信号。- resizeMode()¶
- Return type:
另请参阅
属性
resizeModeᅟ的获取器。- rootContext()¶
- Return type:
此函数返回上下文层次结构的根。每个QML组件都在QQmlContext中实例化。QQmlContext对于将数据传递给QML组件至关重要。在QML中,上下文按层次结构排列,此层次结构由QQmlEngine管理。
- rootObject()¶
- Return type:
返回视图的根
item。当setSource()未被调用时,如果调用时使用了损坏的QtQuick代码或在QtQuick内容正在创建时,可能为null。- sceneGraphError(error, message)¶
- Parameters:
错误 –
SceneGraphErrormessage – str
当场景图初始化期间发生
error时,会发出此信号。如果应用程序希望以自定义方式处理错误,如OpenGL上下文创建失败,则应连接到此信号。当没有插槽连接到信号时,行为将有所不同:Quick将打印
message,或显示消息框,并终止应用程序。此信号将从GUI线程发出。
另请参阅
设置清除
color。默认情况下,这是一个不透明的颜色。要获得一个半透明的
QQuickWidget,请调用此函数并将color设置为Qt::transparent,在顶层窗口上设置Qt::WA_TranslucentBackground小部件属性,并通过setFormat()请求一个alpha通道。另请参阅
- setContent(url, component, item)¶
- Parameters:
url –
QUrl组件 –
QQmlComponent项目 –
QObject
- setFormat(format)¶
- Parameters:
格式 –
QSurfaceFormat
设置此小部件使用的上下文和离屏表面的
format。当需要请求给定OpenGL版本或配置文件的上下文时,调用此函数。深度、模板和alpha缓冲区的大小会自动处理,无需显式请求。
另请参阅
- setResizeMode(arg__1)¶
- Parameters:
arg__1 –
ResizeMode
另请参阅
属性
resizeModeᅟ的设置器。将源设置为
url,加载QML组件并实例化它。确保提供的URL是完整且正确的,特别是从本地文件系统加载文件时,使用QUrl::fromLocalFile()。
多次使用相同的URL调用此方法将导致QML组件被重新实例化。
另请参阅
属性
sourceᅟ的设置器。如果设置了,返回源URL。
另请参阅
属性
sourceᅟ的获取器。属性
statusᅟ的获取器。当组件的当前
status发生变化时,会发出此信号。属性
statusᅟ的通知信号。