QQmlExpression Class
QQmlExpression 类在 QML 环境中解析 JavaScript。更多内容...
| 标题: | #include <QQmlExpression> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += 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 |
| void | clearError() |
| int | columnNumber() const |
| QQmlContext * | context() const |
| QQmlEngine * | engine() const |
| QQmlError | error() const |
| QVariant | evaluate(bool *valueIsUndefined = nullptr) |
| QString | expression() const |
| bool | hasError() const |
| int | lineNumber() const |
| bool | notifyOnValueChanged() const |
| QObject * | scopeObject() const |
| void | setExpression(const QString &expression) |
| void | setNotifyOnValueChanged(bool notifyOnChange) |
| void | setSourceLocation(const QString &url, int line, int column = 0) |
| QString | sourceFile() const |
信号
| void | valueChanged() |
详细描述
例如,假设有一个名为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)
创建一个作为parent 子节点的QQmlExpression对象。
expression 的JavaScript将在ctxt QQmlContext 中执行。如果指定了scope 对象,则该对象的属性在表达式执行期间也将处于作用域内。
[explicit] QQmlExpression::QQmlExpression(const QQmlScriptString &script, QQmlContext *ctxt = nullptr, QObject *scope = nullptr, QObject *parent = nullptr)
创建一个作为parent 子节点的QQmlExpression对象。
script 提供了待求值的表达式、求值上下文以及用于求值的范围对象。如果提供了ctxt 和scope ,它们将覆盖script 提供的上下文和范围对象。
另请参阅 QQmlScriptString 。
[override virtual noexcept] QQmlExpression::~QQmlExpression()
销毁QQmlExpression 实例。
void QQmlExpression::clearError()
清除所有表达式错误。此后对hasError()的调用将返回false。
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。
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)
将此表达式的位置设置为line 以及url 下的column 。脚本引擎会使用这些信息。
QString QQmlExpression::sourceFile() const
返回此表达式的源文件 URL。源位置必须已通过调用setSourceLocation() 方法预先设置。
[signal] void QQmlExpression::valueChanged()
每当表达式的值与上次求值时相比发生变化时,都会发出此信号。在发出此信号之前,必须已对该表达式进行过至少一次求值(通过调用QQmlExpression::evaluate())。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.