QT脚本在组态软件中实现动态功能的应用
来源:互联网 发布:淘宝商品删除怎么恢复 编辑:程序博客网 时间:2024/06/12 01:00
在组态软件中,要实现一些复杂的功能,我们都离不开脚本的实现。常见的脚本有VBScript、Jscript、Lua以及C语言脚本等,如果你的组态软件是基与QT4.6以上版本开发的话,那么QT的强大功能将为你展现出来。国内已经很多大型SCADA系统都使用QT了,这是因为很多厂家要支持跨平台,而QT与生俱来就是为此而诞生的。
在常见的解决组态过程常常碰到复杂的问题,一般组态软件也就是通过Activex控件或类似控件形式自定义接口来解决需求,而有些组态软件通过VBScript封装的脚本引擎来提供接口。但这些首先解决不了跨平台和组件之间消息传递问题。希望此文能为您抛砖引玉提供一些思想。
1、首先我们创建一个最简单的工程
2、在对话框中添加一个按钮“加载脚本”和一个标签“测试”,标签的objectname=m_pBtnTest
3、相关程序代码
Test.cpp代码
#include "test.h"#include <QMessageBox>QScriptValue myAdd(QScriptContext *context, QScriptEngine *engine){ QScriptValue a = context->argument(0); QScriptValue b = context->argument(1); return a.toNumber() + b.toNumber();}void ShowMessage(QString strText){ QMessageBox::information(NULL, ("提示"), strText, ("确定(&O)"));}QScriptValue ShowMessageFunc(QScriptContext *context, QScriptEngine *engine){ QString strMsg = context->argument(0).toString(); ShowMessage(strMsg); return engine->nullValue();}test::test(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags){ ui.setupUi(this); m_bLoad = false; pEngine = new QScriptEngine; QScriptValue fun = pEngine->newFunction(myAdd); pEngine->globalObject().setProperty("myAdd", fun); //QScriptValue result = pEngine->evaluate("myAdd(2, 1)"); QScriptValue funShowMsg = pEngine->newFunction(ShowMessageFunc); pEngine->globalObject().setProperty("ShowMessage", funShowMsg); QScriptValue mainWin = pEngine->newQObject(this); pEngine->globalObject().setProperty("Form", mainWin); // 假设图形上有一个图形按钮 QRect qrect = ui.m_pbtnTest->geometry(); QString strName = ui.m_pbtnTest->objectName(); QString strTxt = ui.m_pbtnTest->text(); QPushButton *pBtnTest = new QPushButton(strTxt, this); pBtnTest->setObjectName(strName); pBtnTest->setGeometry(qrect.left(), qrect.top(), qrect.width(), qrect.height()); QScriptValue scriptButton = pEngine->newQObject(pBtnTest); pEngine->globalObject().setProperty(strName, scriptButton); bool bConnect1 = connect(ui.m_pbtnScript, SIGNAL(clicked()), this, SLOT(OnBtnScript()));} test::~test(){ delete pEngine; pEngine = NULL;} void test::OnBtnScript() { // TODO: Add your control notification handler code here if (!m_bLoad) { QMessageBox::information(this, ("提示"), ("加载脚本!"), ("确定(&O)")); } else { return; } QString fileName = "test.js"; QFile scriptFile(fileName); if (!scriptFile.open(QIODevice::ReadOnly)) { QMessageBox::information(this, "错误", "打开文件失败!"); return; } QTextStream stream(&scriptFile); QString contents = stream.readAll(); scriptFile.close(); pEngine->evaluate(contents, fileName); QScriptValue result = pEngine->evaluate("init()"); if (pEngine->hasUncaughtException()) { QMessageBox::information(this, "错误", pEngine->uncaughtException().toString()); } m_bLoad = true;}
Main.cpp代码
#include "test.h"#include <QtGui>#include <QtGui/QApplication> int main(int argc, char *argv[]){ QApplication a(argc, argv); QTextCodec *codec = QTextCodec::codecForName("GB2312"); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec); QTextCodec::setCodecForTr(codec); test w; w.show(); return a.exec();}
Test.js脚本
// JScript source codevar g_nStatus = 0; function init(){ Form.m_pbtnTest.clicked.connect(OnBtnTest);}function OnBtnTest(){ ShowMessage("QSA脚本测试123456789!"); // 这里将被调用显示}
4、运行结果
点击“加载脚本”按钮,然后点击“测试”(此时的标签已经被按钮填充)。
- QT脚本在组态软件中实现动态功能的应用
- QT脚本在组态软件中实现动态功能的应用
- 网页矢量图在组态软件中的应用
- 组态软件在配套设备中的应用
- 在Qt 中实现Sleep的功能
- 浅谈组态软件的控制功能
- 如何在你的软件中加入脚本功能
- 基于Qt的组态监控软件实现以及分析(转)
- iFIX组态软件在某电厂辅控系统的应用
- GPRS技术在紫金桥组态软件中的应用
- AtScript 在你的程序中实现脚本功能
- 利用DDE实现紫金桥组态软件与各种组态软件的通讯
- 紫金桥组态软件分屏显示技术的应用
- 组态软件原理与实现
- 组态王EMAIL邮件组态软件自动发送功能
- 如何在Ubuntu QML应用中实现ComboBox的功能
- Linux Qt编程-在程序中启动其他应用、脚本
- 组态软件的一些资源
- hdu_2010_水仙花数_又见水仙花数-.-!!
- Oracle中trim函数的用法
- 常见问题小记(未将对象引用设置到对象的实例。)
- MCU51单片机uIP协议栈+ENC28J60网卡 移植、应用
- hdu_2011_多项式求和
- QT脚本在组态软件中实现动态功能的应用
- Java学习之Iterator(迭代器)的一般用法
- hdu_2012_素数判定
- 10215 - The Largest/Smallest Box ...
- C中的内存模式(编译模式)
- ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集ssh2项目错误锦集
- 反射
- 谷歌marker使用说明
- 在视图中使用递归生成树状结构