函数

qjsEngine(object)
Parameters:

对象QObject

Return type:

QJSEngine

返回与object关联的QJSEngine(如果有的话)。

如果您已经将一个QObject暴露给JavaScript环境,并且稍后在程序中想要重新获得访问权限,这个函数非常有用。它不需要您保留从newQObject()返回的包装器。

qmlClearTypeRegistrations()

清除所有存储的类型注册,例如那些由qmlRegisterType()生成的。

在存在QQmlEngine时不要调用此函数,否则行为将是未定义的。在调用此函数之前,必须删除所有现有的QQmlEngines。此函数仅影响应用程序全局缓存。删除QQmlEngine以清除与该引擎相关的所有缓存数据。

qmlContext(arg__1)
Parameters:

arg__1QObject

Return type:

QQmlContext

qmlEngine(arg__1)
Parameters:

arg__1QObject

Return type:

QQmlEngine

qmlProtectModule(uri, majVersion)
Parameters:
  • uri – 字符串

  • majVersion – int

Return type:

布尔

此函数保护模块免受进一步修改。这可以用于防止其他插件将类型注入到您的模块中。它还可以提高性能,因为当达到此导入时,它允许引擎跳过检查新类型或插件的可能性。

一旦调用了qmlProtectModule,QML引擎将不再搜索新的qmldir文件来加载模块。不过,它会重用之前加载的任何qmldir文件。因此,此时存在的类型将继续工作。请注意,不同的QML引擎可能会加载不同的模块。然而,模块保护是全局的,会影响所有引擎。在文件系统较慢的情况下,定位qmldir文件和加载插件的开销可能会很明显。因此,一旦确定不再需要加载模块,保护模块可能是一个很好的优化。还要注意,模块锁定不仅影响插件,还影响任何其他qmldir指令,如importprefer,以及在qmldir文件中声明的任何复合类型或脚本。

此外,调用此函数后,任何尝试将C++类型注册到此URI和主要版本组合的操作都将导致运行时错误。

如果找到并锁定了以uri作为模块标识符和majVersion作为主版本号的模块,则返回true,否则返回false。模块必须包含导出的类型才能被找到。

qmlRegisterModule(uri, versionMajor, versionMinor)
Parameters:
  • uri – 字符串

  • versionMajor – int

  • versionMinor – int

此函数在特定的uri中注册一个模块,并在versionMajorversionMinor中指定版本。

这可以用于使某个模块版本可用,即使没有为该版本注册类型。这对于保持相关模块版本的同步特别有用。

qmlRegisterSingletonType(url, uri, versionMajor, versionMinor, qmlName)
Parameters:
  • urlQUrl

  • uri – 字符串

  • versionMajor – int

  • versionMinor – int

  • qmlName – str

Return type:

整数

此函数可用于注册一个名为qmlName的单例类型,该类型从版本号由versionMajorversionMinor组成的uri导入的库中。该类型由位于url的QML文件定义。URL必须是绝对URL,即url.isRelative() == false。

此外,类型的QML文件必须在其导入语句中包含pragma Singleton语句。

单例类型可以通过其注册的类型名称引用,并且该类型名称可以用作Connections类型中的目标,或者像任何其他类型ID一样使用。一个例外是,单例类型属性不能被别名化(因为单例类型名称不标识与任何其他项在同一组件中的对象)。

用法:

// Second, register the QML singleton type by calling this function in an initialization function.
qmlRegisterSingletonType(QUrl("file:///absolute/path/SingletonType.qml"), "Qt.example.qobjectSingleton", 1, 0, "RegisteredSingleton");

为了在QML中使用注册的单例类型,您必须导入单例类型。

也可以在不使用qmlRegisterSingletonType函数的情况下注册QML单例类型。这可以通过在类型的QML文件的导入中添加pragma Singleton语句来实现。此外,类型必须在带有singleton关键字的qmldir文件中定义,并且使用单例的QML文件必须导入该qmldir。

另请参阅

QML_SINGLETON()

qmlRegisterType(url, uri, versionMajor, versionMinor, qmlName)
Parameters:
  • urlQUrl

  • uri – 字符串

  • versionMajor – int

  • versionMinor – int

  • qmlName – str

Return type:

整数

此函数在QML系统中注册一个类型,名称为qmlName,该类型从uri导入的库中获取,版本号由versionMajorversionMinor组成。该类型由位于url的QML文件定义。URL必须是绝对URL,即url.isRelative() == false。

通常,QML文件可以直接从其他QML文件加载为类型,或者使用qmldir文件。此函数允许从C++代码中注册文件到类型,例如在启动时需要程序化确定类型映射时。

如果注册不成功,返回-1。

qmlRegisterUncreatableMetaObject(staticMetaObject, uri, versionMajor, versionMinor, qmlName, reason)
Parameters:
  • staticMetaObjectQMetaObject

  • uri – 字符串

  • versionMajor – int

  • versionMinor – int

  • qmlName – str

  • reason – str

Return type:

整数

此函数在QML系统中注册staticMetaObject及其扩展,使用从uri导入的库中的名称qmlName,版本号由versionMajorversionMinor组成。

无法创建元对象的实例。如果用户尝试创建它,将打印带有给定reason的错误消息。

此函数对于注册Q_NAMESPACE命名空间非常有用。

返回QML类型ID。

例如:

namespace MyNamespace {
  Q_NAMESPACE
  enum MyEnum {
      Key1,
      Key2,
  };
  Q_ENUM_NS(MyEnum)
}

//...
qmlRegisterUncreatableMetaObject(MyNamespace::staticMetaObject, "io.qt", 1, 0, "MyNamespace", "Access to enums & flags only");

在QML方面,您现在可以使用注册的枚举:

Component.onCompleted: console.log(MyNamespace.Key2)

另请参阅

QML_ELEMENT() QML_NAMED_ELEMENT() QML_UNCREATABLE()

qmlTypeId(uri, versionMajor, versionMinor, qmlName)
Parameters:
  • uri – 字符串

  • versionMajor – int

  • versionMinor – int

  • qmlName – str

Return type:

整数

返回在特定uri中注册的名为qmlName的类型的QML类型ID,并在versionMajorversionMinor中指定了版本。

此函数返回与QML类型注册函数(如qmlRegisterType()qmlRegisterSingletonType())相同的值。

如果 qmlNameuriversionMajor 匹配到一个已注册的类型,但 versionMinor 中指定的次要版本更高,则返回具有最接近的次要版本的类型的 id。

如果没有找到匹配的类型或给定的参数之一无效,则返回-1。

注意

: qmlTypeId 尝试使模块可用,即使它们尚未被任何引擎访问。这可能会在第一次访问模块时引入开销。尝试从不存在模块中查找类型总是会引入这种开销。

另请参阅

QML_ELEMENT() QML_NAMED_ELEMENT() QML_SINGLETON() qmlRegisterType() qmlRegisterSingletonType()

qmlAttachedPropertiesObject(type_obj, arg__2[, arg__3=true])
Parameters:
  • type_objPyTypeObject

  • arg__2QObject

  • arg__3 – 布尔值

Return type:

QObject

qmlRegisterType(pytype: type, uri: str, versionMajor: int, versionMinor: int, qmlName: str) int
Parameters:
  • pytype (type) – Python 类

  • uri (str) – 在QML中导入组件时使用的uri

  • versionMajor (int) – 主版本号

  • versionMinor (int) – 次要版本

  • qmlName (str) – 暴露给QML的名称

Returns:

int (QML 类型 id)

此函数在QML系统中注册Python 类型,名称为qmlName,在从uri导入的库中,版本号由versionMajorversionMinor组成。例如,这将注册一个Python类‘MySliderItem’作为名为‘Slider’的QML类型,用于名为‘com.mycompany.qmlcomponents’的模块的‘1.0’版本:

qmlRegisterType(MySliderItem, "com.mycompany.qmlcomponents", 1, 0, "Slider")

一旦注册完成,该类型可以通过导入指定的模块名称和版本号在QML中使用:

import com.mycompany.qmlcomponents 1.0

Slider { ... }

请注意,库将类型注册到比库实际版本更旧的版本是完全合理的。实际上,新库通常会允许针对先前版本编写的QML继续工作,即使某些类型的更高级版本已经可用。

qmlRegisterSingletonType(pytype: type, uri: str, versionMajor: int, versionMinor: int, typeName: str, callback: object) int
Parameters:
  • pytype (type) – Python 类

  • uri (str) – 在QML中导入组件时使用的uri

  • versionMajor (int) – 主版本号

  • versionMinor (int) – 次要版本

  • typeName (str) – 暴露给QML的名称

  • callback (object) – Python 可调用对象(用于处理 Python 类型)

Returns:

int (QML 类型 id)

此函数将Python类型注册为QML系统中的单例,使用提供的回调(该回调以QQmlEngine作为参数)来生成单例。

qmlRegisterSingletonType(pytype: type, uri: str, versionMajor: int, versionMinor: int, typeName: str) int
Parameters:
  • pytype (type) – Python 类

  • uri (str) – 在QML中导入组件时使用的uri

  • versionMajor (int) – 主版本号

  • versionMinor (int) – 次要版本

  • typeName (str) – 暴露给QML的名称

Returns:

int (QML 类型 id)

此函数将Python类型注册为QML系统中的单例。

或者,可以使用 QmlSingleton 装饰器。

qmlRegisterSingletonType(uri: str, versionMajor: int, versionMinor: int, typeName: str, callback: object) int
Parameters:
  • uri (str) – 在QML中导入组件时使用的uri

  • versionMajor (int) – 主版本号

  • versionMinor (int) – 次要版本

  • typeName (str) – 暴露给QML的名称

  • callback (object) – Python 可调用对象(用于处理 QJSValue)

Returns:

int (QML 类型 id)

此函数使用提供的回调(该回调以QQmlEngine作为参数)在QML系统中注册一个QJSValue作为单例,以生成单例。

qmlRegisterSingletonInstance(pytype: type, uri: str, versionMajor: int, versionMinor: int, typeName: str, instanceObject: object) int
Parameters:
  • pytype (type) – Python 类

  • uri (str) – 在QML中导入组件时使用的uri

  • versionMajor (int) – 主版本号

  • versionMinor (int) – 次要版本

  • typeName (str) – 暴露给QML的名称

  • instanceObject (object) – 要注册的单例对象

Returns:

int (QML 类型 id)

此函数注册一个单例Python对象instanceObject,具有特定的uritypeName。其版本是versionMajorversionMinor的组合。使用此函数将给定类型pytype的对象注册为单例类型。

qmlRegisterUncreatableType(pytype: type, uri: str, versionMajor: int, versionMinor: int, qmlName: str, noCreationReason: str) int
Parameters:
  • pytype (type) – Python 类

  • uri (str) – 在QML中导入组件时使用的uri

  • versionMajor (int) – 主版本号

  • versionMinor (int) – 次要版本

  • qmlName (str) – 暴露给QML的名称

  • noCreationReason (str) – 尝试创建QML类型时显示的错误消息

Returns:

int (QML 类型 id)

此函数将Python 类型注册到QML系统中,作为一个不可创建的类型,名称为qmlName,在从uri导入的库中,版本号由versionMajorversionMinor组成,当尝试创建该类型时,显示noCreationReason作为错误消息。例如,这将一个名为‘MySliderItem’的Python类注册为名为‘Slider’的QML类型,用于名为‘com.mycompany.qmlcomponents’的模块的‘1.0’版本:

::

qmlRegisterUncreatableType(MySliderItem, “com.mycompany.qmlcomponents”, 1, 0, “Slider”, “Slider 无法创建。”)

请注意,库将类型注册到比库实际版本更旧的版本是完全合理的。实际上,新库通常会允许针对先前版本编写的QML继续工作,即使某些类型的更高级版本已经可用。

或者,可以使用QmlUncreatable装饰器。

枚举

class QML_HAS_ATTACHED_PROPERTIES
class QQmlModuleImportSpecialVersions

定义了一些可以传递给qmlRegisterModuleImport()qmlUnregisterModuleImport()的版本参数的特殊值。

常量

描述

QQmlEngine.QQmlModuleImportModuleAny

当作为基础模块的majorVersion传递时,表示导入将应用于模块的任何版本。

QQmlEngine.QQmlModuleImportLatest

当作为导入模块的主版本或次版本传递时,表示应导入最新的整体版本,或指定主版本的最新次版本。

QQmlEngine.QQmlModuleImportAuto

当作为导入模块的主版本传递时,表示应转发基础模块的版本。