日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Qt文档阅读笔记-编写应用脚本解析与实例

發(fā)布時(shí)間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文档阅读笔记-编写应用脚本解析与实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

官方解析

博主例子


官方解析

編寫(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)估。

QJSEngine engine;qDebug() << "the magic number is:" << engine.evaluate("1 + 2").toNumber();


返回值將是評(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)單,如下代碼:

engine.globalObject().setProperty("foo", 123);qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber();


這里面的自定義屬性已經(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_H

main.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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。