QQmlExpression 类

QQmlExpression 类计算 QML 上下文中的 JavaScript。 更多...

头文件 #include <QQmlExpression>
CMakefind_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmakeQT += qml
继承自 QObject

公共函数

QQmlExpression()
QQmlExpression(QQmlContext *ctxt, QObject *scope, const QString &expression, QObject *parent = nullptr)
QQmlExpression(const QQmlScriptString &script, QQmlContext *ctxt = nullptr, QObject *scope = nullptr, QObject *parent = nullptr)
virtual~QQmlExpression() override
voidclearError()
intcolumnNumber() const
QQmlContext *context() const
QQmlEngine *engine() const
QQmlErrorerror() const
QVariantevaluate(bool *valueIsUndefined = nullptr)
QStringexpression() const
boolhasError() const
intlineNumber() const
boolnotifyOnValueChanged() const
QObject *scopeObject() const
voidsetExpression(const QString &expression)
voidsetNotifyOnValueChanged(bool notifyOnChange)
voidsetSourceLocation(const QString &url, int line, int column = 0)
QStringsourceFile() const

信号

voidvalueChanged()

详细描述

例如,给定一个类似这样的文件 main.qml

import QtQuick 2.0

Item {
    width: 200; height: 200
}

以下代码在上面的 QML 上下文中评估一个 JavaScript 表达式

QQmlEngine *engine = new QQmlEngine;
QQmlComponent component(engine, QUrl::fromLocalFile("main.qml"));

QObject *myObject = component.create();
QQmlExpression *expr = new QQmlExpression(engine->rootContext(), myObject, "width * 2");
int result = expr->evaluate().toInt();  // result = 400

成员函数文档

QQmlExpression::QQmlExpression()

创建一个无效的 QQmlExpression。

由于表达式没有关联的 QQmlContext,这将是空表达式对象,其值始终是无效的 QVariant

QQmlExpression::QQmlExpression(QQmlContext *ctxt, QObject *scope, const QString &expression, QObject *parent = nullptr)

创建一个作为 父对象 的子对象的 QQmlExpression 对象。

JavaScript 表达式将在 ctxt QQmlContext 中执行。如果指定,作用域 对象的属性也将在该表达式的执行期间生效。

[显式] QQmlExpression::QQmlExpression(const QQmlScriptString &script, QQmlContext *ctxt = nullptr, QObject *scope = nullptr, QObject *parent = nullptr)

创建一个作为 父对象 的子对象的 QQmlExpression 对象。

脚本提供要评估的表达式、评估它所在的环境以及用于评估的作用域对象。如果提供,ctxtscope 将覆盖脚本提供的环境和作用域对象。

另请参阅 QQmlScriptString

[重写虚函数 noexcept] QQmlExpression::~QQmlExpression()

销毁 QQmlExpression 实例。

void QQmlExpression::clearError()

清除任何表达式错误。在此之后调用 hasError() 将返回 false。

另请参阅 hasError() 和 error

int QQmlExpression::columnNumber() const

返回此表达式对应源文件的列号。必须通过调用 setSourceLocation() 来设置源位置。

QQmlContext *QQmlExpression::context() const

返回与该表达式关联的 QQmlContext,如果没有关联或者 QQmlContext 已被销毁,则返回 nullptr

QQmlEngine *QQmlExpression::engine() const

返回与该表达式关联的 QQmlEngine,如果没有关联或者 QQmlEngine 已被销毁,则返回 nullptr

QQmlError QQmlExpression::error() const

返回上次调用 evaluate() 时的任何错误。如果没有错误,则返回一个无效的 QQmlError 实例。

另请参阅 hasError() 和 clearError

QVariant QQmlExpression::evaluate(bool *valueIsUndefined = nullptr)

评估表达式,返回评估结果,若表达式无效或有错误,则返回一个无效的 QVariant

valueIsUndefined 被设置为 true,如果表达式产生的值为未定义。

另请参阅 hasError() 和 error

QString QQmlExpression::expression() const

返回表达式字符串。

另请参阅 setExpression

bool QQmlExpression::hasError() const

如果上次调用 evaluate() 导致错误,则返回 true,否则返回 false。

另请参阅error() 和 clearError()。

int QQmlExpression::lineNumber() const

返回此表达式的源文件行号。必须通过调用 setSourceLocation() 设置源位置。

bool QQmlExpression::notifyOnValueChanged() const

如果表达式的评估值更改时发出 valueChanged() 信号,则返回 true。

另请参阅setNotifyOnValueChanged()。

QObject *QQmlExpression::scopeObject() const

如果有提供,则返回表达式的范围对象,否则返回 0。

除了来自表达式 QQmlContext 的数据外,在表达式的评估期间,范围对象的属性也在作用域内。

void QQmlExpression::setExpression(const QString &expression)

将表达式设置为 expression

另请参阅expression()。

void QQmlExpression::setNotifyOnValueChanged(bool notifyOnChange)

设置当表达式的评估值更改时是否发出 valueChanged() 信号。

如果 notifyOnChange 为 true,则 QQmlExpression 将监控表达式评估中涉及的属性,如果它们已更改,则发出 QQmlExpression::valueChanged()。这允许应用程序确保与表达式结果相关的任何值都保持最新。

如果 notifyOnChange 为 false(默认),则 QQmlExpression 不会监控表达式评估中涉及的属性,并且 QQmlExpression::valueChanged() 从不会发出。如果应用程序想要评估表达式的“一次性”评估,则这更高效。

另请参阅notifyOnValueChanged()。

void QQmlExpression::setSourceLocation(const QString &url, int line, int column = 0)

将此表达式的位置设置为 urllinecolumn。这些信息用于脚本引擎。

QString QQmlExpression::sourceFile() const

返回此表达式的源文件 URL。必须通过调用 setSourceLocation() 设置源位置。

[信号] void QQmlExpression::valueChanged()

每当表达式的值从上次评估以来发生变化时都会发出。在发出此信号之前,表达式必须至少被评估过一次(通过调用QQmlExpression::evaluate)。

© 2024 Qt公司限公司。本文档中包含的文档贡献均为各自所有者的版权。本提供的文档受GNU自由文档许可证版本1.3的条款约束,由自由软件基金会发布。Qt及其相关标志是芬兰及世界其他国家的Qt公司商标。所有其他商标均为其所有者所有。