Qt文档阅读笔记-编写应用脚本解析与实例
目錄
官方解析
博主例子
官方解析
編寫(xiě)應(yīng)用腳本
Qt提供了JavaScript腳本對(duì)應(yīng)用程序的支持。下面將全方位說(shuō)明JavaScript在Qt中的應(yīng)用。
Scripting Classes
如下的類為Qt應(yīng)用程序添加腳本的功能。
QJSEngine:提供運(yùn)行JavaScript代碼的環(huán)境
QJSValue:充當(dāng)Qt/JavaScrpit數(shù)據(jù)類型的容器
QJSValueIterator:QJSvalue的Java風(fēng)格的迭代器
基礎(chǔ)用法
評(píng)估腳本代碼,先要?jiǎng)?chuàng)建一個(gè)QJSEngine對(duì)象,并且調(diào)用evaluate()這個(gè)函數(shù),通過(guò)傳遞txt的腳本代碼進(jìn)行評(píng)估。
返回值將是評(píng)估的結(jié)果,返回值為QJSValue這對(duì)象;這個(gè)返回值可以轉(zhuǎn)換為標(biāo)準(zhǔn)C++或者Qt的類型(QVariant)。
通過(guò)使用QJSEngine對(duì)象注冊(cè)自定義屬性,可以讓這個(gè)自定義屬性在腳本中運(yùn)行。通過(guò)QJSEngine的全局對(duì)象可以設(shè)置屬性,這種騷操作很簡(jiǎn)單,如下代碼:
這里面的自定義屬性已經(jīng)在script環(huán)境中了,因此他可以腳本中生效。
把一個(gè)QObject對(duì)象放入Script引擎中
任何QObject派生類的實(shí)例都能放到script里面使用。
當(dāng)QObject作為參數(shù)被QJSEngine::newQObject()調(diào)用時(shí),Qt腳本包裝器對(duì)象被創(chuàng)建,這個(gè)對(duì)象能夠用來(lái)制作QObject的信號(hào),槽,各種屬性,以及繼承樹(shù)。
舉一個(gè)栗子,一個(gè)QObject的派生類對(duì)象可以在腳本代碼內(nèi)命名為"myObject"
engine.globalObject().setProperty("foo", 123);qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber();
這里將會(huì)創(chuàng)建一個(gè)全局的變量,變量名為myObject,并且是在腳本環(huán)境中。這個(gè)變量充當(dāng)了底層C++對(duì)象的代理。注意,腳本的名稱可以是任意的名稱等,他與Qbject::objectName()無(wú)關(guān)
博主例子
對(duì)上面例子的實(shí)現(xiàn)
源碼如下:
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(); }?
總結(jié)
以上是生活随笔為你收集整理的Qt文档阅读笔记-编写应用脚本解析与实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++中多态的基本概念以及虚表的基本概念
- 下一篇: Qt工作笔记-保存textEdit中的数