QT系列——表达式计算
【摘要】 我们提起表达式的计算功能,大家是不是都想到的是要处理中缀表达式、后缀表达式,表达式解析等等一系列步骤。其实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)