如何才能在Qt Script脚本里面直接new自己的Qt C++类

来源:互联网 发布:淘宝好评卡模板 编辑:程序博客网 时间:2024/05/22 08:14

Qt的script脚本除了直接使用Qt C++暴露给Qt Script的那些类以外,也可以直接new一个你自己写的Qt C++类。方法如下:

1.生成一个自己的C++类Add

  • Demo.pro

QT       += core scriptQT       -= guiTARGET = DemoCONFIG   += consoleCONFIG   -= app_bundleTEMPLATE = appSOURCES += main.cpp add.cppHEADERS += add.h
注意一定要加上 QT += script

  • add.h
#ifndef ADD_H#define ADD_H#include <QObject>class Add : public QObject{    Q_OBJECTpublic:    explicit Add(QObject *parent = 0);public slots:    int add(int x, int y);};#endif // ADD_H
  • add.cpp
#include "add.h"Add::Add(QObject *parent) :    QObject(parent){}int Add::add(int x, int y){    return x + y;}

2. 让Add可以在Qt script里面直接new


  1. 用Q_SCRIPT_DECLARE_QMETAOBJECT(Add, QObject*)来声明你的QMetaObject
  2. 用engine.scriptValueFromQMetaObject<Add>()来把Add变成一个QScriptValue addClass
  3. 把addClass暴露给QScriptEngine
#include <QtCore/QCoreApplication>#include <QtScript>#include <QtDebug>#include "add.h"Q_SCRIPT_DECLARE_QMETAOBJECT(Add, QObject*)int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);        QScriptEngine engine;    QScriptValue addClass = engine.scriptValueFromQMetaObject<Add>();    engine.globalObject().setProperty("Add", addClass);    engine.evaluate("f = new Add()");    qDebug()<<"3+5="<<engine.evaluate("f.add(3, 5)").toInteger();    return a.exec();}




原创粉丝点击