Qt文档阅读笔记-编写应用脚本解析与实例
目錄
官方解析
博主例子
官方解析
編寫應用腳本
Qt提供了JavaScript腳本對應用程序的支持。下面將全方位說明JavaScript在Qt中的應用。
Scripting Classes
如下的類為Qt應用程序添加腳本的功能。
QJSEngine:提供運行JavaScript代碼的環境
QJSValue:充當Qt/JavaScrpit數據類型的容器
QJSValueIterator:QJSvalue的Java風格的迭代器
基礎用法
評估腳本代碼,先要創建一個QJSEngine對象,并且調用evaluate()這個函數,通過傳遞txt的腳本代碼進行評估。
返回值將是評估的結果,返回值為QJSValue這對象;這個返回值可以轉換為標準C++或者Qt的類型(QVariant)。
通過使用QJSEngine對象注冊自定義屬性,可以讓這個自定義屬性在腳本中運行。通過QJSEngine的全局對象可以設置屬性,這種騷操作很簡單,如下代碼:
這里面的自定義屬性已經在script環境中了,因此他可以腳本中生效。
把一個QObject對象放入Script引擎中
任何QObject派生類的實例都能放到script里面使用。
當QObject作為參數被QJSEngine::newQObject()調用時,Qt腳本包裝器對象被創建,這個對象能夠用來制作QObject的信號,槽,各種屬性,以及繼承樹。
舉一個栗子,一個QObject的派生類對象可以在腳本代碼內命名為"myObject"
engine.globalObject().setProperty("foo", 123);qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber();
這里將會創建一個全局的變量,變量名為myObject,并且是在腳本環境中。這個變量充當了底層C++對象的代理。注意,腳本的名稱可以是任意的名稱等,他與Qbject::objectName()無關
博主例子
對上面例子的實現
源碼如下:
myobject.h
#ifndef MYOBJECT_H #define MYOBJECT_H#include <QObject>class MyObject:public QObject{Q_OBJECT public:MyObject(QObject *parent=0):QObject(parent){m_myValue=9999;}~MyObject(){}int m_myValue; };#endif // MYOBJECT_Hmain.cpp
#include <QJSEngine> #include <QObject> #include <QApplication> #include <QJSValue> #include <QDebug> #include "myobject.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);QJSEngine engine;qDebug()<<"The value is "<<engine.evaluate("1+2").toNumber();engine.globalObject().setProperty("foo",123);qDebug()<<"foo times two is "<<engine.evaluate("foo*2").toNumber();QObject *someObject=new MyObject;QJSValue objectvalue=engine.newQObject(someObject);engine.globalObject().setProperty("myObject",objectvalue);qDebug()<<"QObject *someObject pointer address is "<<someObject;qDebug()<<"Engine.evaluate(\"myObject\"):"<<engine.evaluate("myObject").toQObject();MyObject *myObject=qobject_cast<MyObject*>(engine.evaluate("myObject").toQObject());qDebug()<<"The value is "<<myObject->m_myValue;return a.exec(); }?
總結
以上是生活随笔為你收集整理的Qt文档阅读笔记-编写应用脚本解析与实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中多态的基本概念以及虚表的基本概念
- 下一篇: Qt工作笔记-保存textEdit中的数