I have program which use global properties in QScriptEngine.
There is the class of variable used in script code:
#ifndef VARIABLECONFIGURATION_H
#define VARIABLECONFIGURATION_H
#include <QMetaType>
class VariableConfiguration
: public QObject{
Q_OBJECT
private:
int _value;
public:
explicit VariableConfiguration
(QObject *parent
= 0);
public slots:
void setValue(int value);
int value() const;
signals:
void valueChanged(int value);
};
Q_DECLARE_METATYPE(VariableConfiguration*)
#endif // VARIABLECONFIGURATION_H
#ifndef VARIABLECONFIGURATION_H
#define VARIABLECONFIGURATION_H
#include <QMetaType>
class VariableConfiguration : public QObject
{
Q_OBJECT
private:
int _value;
public:
explicit VariableConfiguration(QObject *parent = 0);
public slots:
void setValue(int value);
int value() const;
signals:
void valueChanged(int value);
};
Q_DECLARE_METATYPE(VariableConfiguration*)
#endif // VARIABLECONFIGURATION_H
To copy to clipboard, switch view to plain text mode
#include "VariableConfiguration.h"
VariableConfiguration
::VariableConfiguration(QObject *parent
) :}
void VariableConfiguration::setValue(int value) {
if (_value != value) {
_value = value;
emit valueChanged(_value);
}
}
int VariableConfiguration::value() const {
return _value;
}
#include "VariableConfiguration.h"
VariableConfiguration::VariableConfiguration(QObject *parent) :
QObject(parent), _value(0) {
}
void VariableConfiguration::setValue(int value) {
if (_value != value) {
_value = value;
emit valueChanged(_value);
}
}
int VariableConfiguration::value() const {
return _value;
}
To copy to clipboard, switch view to plain text mode
In main code:
_scriptEngine = new QScriptEngine(this);
qScriptRegisterMetaType(_scriptEngine, toScriptValue, fromScriptValue);
VariableConfiguration* var = new VariableConfiguration(this);
connect(var, SIGNAL(valueChanged(int)), this, SLOT(variableValueChanged(int)));
_scriptEngine->globalObject().setProperty("intVar", toScriptValue(_scriptEngine, var));
_scriptEngine = new QScriptEngine(this);
qScriptRegisterMetaType(_scriptEngine, toScriptValue, fromScriptValue);
VariableConfiguration* var = new VariableConfiguration(this);
connect(var, SIGNAL(valueChanged(int)), this, SLOT(variableValueChanged(int)));
_scriptEngine->globalObject().setProperty("intVar", toScriptValue(_scriptEngine, var));
To copy to clipboard, switch view to plain text mode
For example, I need to run script code:
intVar = 10;
How can I do that variable emit valueChanged signal when property value changed while script running?
P.S. Now I can use my variable class as intVar.setValue(10); but need intVar = 10;
Thank you.
Bookmarks