QT系列——表达式计算

举报
小糖饼最甜呀 发表于 2022/04/10 07:55:11 2022/04/10
【摘要】 我们提起表达式的计算功能,大家是不是都想到的是要处理中缀表达式、后缀表达式,表达式解析等等一系列步骤。其实Qt中提供了一个简单的表达式计算的方法,不需要如此繁琐,只需要简单的三步操作,下面开始详细的介绍一下。 详细步骤 1.在pro文件中增加所需要的模块。我们这里在pro文件中添加Qt script模块,具体如下:QT += scriptQt script模块是从Qt4.3开始引入,是基于E...

我们提起表达式的计算功能,大家是不是都想到的是要处理中缀表达式、后缀表达式,表达式解析等等一系列步骤。
其实Qt中提供了一个简单的表达式计算的方法,不需要如此繁琐,只需要简单的三步操作,下面开始详细的介绍一下。

详细步骤

1.在pro文件中增加所需要的模块。

我们这里在pro文件中添加Qt script模块,具体如下:

QT += script

Qt script模块是从Qt4.3开始引入,是基于ECMAScript的脚本语言。我们要使用这个模块进行后续操作,所以需要提前在pro文件中的QT配置项指定该模块。
该模块主要包含了QScriptEngine、QScriptValue等相关类,这里我们用到的就是QScriptEngine、QScriptValue这两个类。

2.添加相关头文件

添加我们需要的头文件,具体如下:

#include <QScriptEngine>

我们这里需要使用到Qt script模块的QScriptEngine类。该类提供了一个计算Qt脚本代码的环境。

3.表达式的具体计算

具体计算方法,具体如下:
Qt使用QScriptEngine进行计算字符串表达式。

示例代码如下:

// QString express;定义表达式内容
QScriptEngine engine;
QScriptValue value = engine.evaluate(express);

QString valueStr = value.toString();

代码解析:

  • 先是将表达式转换为字符串变量,调用QScriptEngine类的evaluate()进行计算。evaluate()函数会返回一个QScriptValue类型的计算结果。
  • QScriptValue类作为Qt script模块的数据类型的容器,该数据类型支持各种C++类型的转换,例如:
  • QScriptValue::toString ():可以将QScriptValue类型转换为QString类型;
  • QScriptValue::toNumber ():可以将QScriptValue类型转换为number类型;

如果表达式执行发生异常,如何获知呢?

  • QScriptEngine类的evaluate()函数在调用时发生异常,则返回值是一个异常对象。
  • 我们可以使用hasUncaughtException()函数来确定在上次调用evaluate()时是否发生了异常。如若发生异常,该函数返回true.
  • 通过uncaughtExceptionLineNumber()函数还可以获得错误所在行。
  • 如果发生异常,QScriptValue的返回值可以先转换成字符串,打印出错误内容。
  • QScriptValue的返回值错误内容示例如下:
    SyntaxError: Parse error

总结

使用Qt script模块的QScriptEngine类的evaluate()函数可以快速进行字符串表达式的计算。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。