ich möchte in einem JavaScript auf eine Qt-Klasse zugreifen können. Mit nachfolgenden Code, kann ich soweit schon ein JavaScript ausführen und dessen (return-)Werte zurück bekommen:
Code: Alles auswählen
// meine Memberfunktion, die das Skript ausführen soll:
void scriptmaster::readScript()
{
//QDir scriptsDir = directoryOf("scripts");
QFile scriptFile("test.js");
if (!scriptFile.open(QIODevice::ReadOnly))
{
QMessageBox::warning(this, tr("MsgBox in da house!"),
tr("Can not open scriptFile test.js.\n"), QMessageBox::Ok, QMessageBox::Ok);
}
QString script = scriptFile.readAll();
scriptFile.close();
QScriptEngine engine;
// Making a QObject Available to the Script Engine
msgBoxMaker *someObject = new msgBoxMaker;
QScriptValue objectValue = engine.newQObject(someObject);
engine.globalObject().setProperty("myObject", objectValue);
connect(someObject, SIGNAL(somethingChanged()), this, SLOT(sendMessage()));
QScriptValue result = engine.evaluate(script);
if (!result.isNumber()) {
// abortOperation();
return;
}
}Code: Alles auswählen
// meine Klasse, die ich im Skript aufrufen möchte:
class msgBoxMaker : public QDialog
{
Q_OBJECT
public:
msgBoxMaker(QWidget *parent =0) : QDialog(parent){}
Q_INVOKABLE void sendMsgNoslot(void) {QMessageBox::warning(this, tr("My Calculator"),
tr("Box in da house.\n"), QMessageBox::Cancel, QMessageBox::Cancel);}
public slots:
void sendMsgSlot(void) {QMessageBox::warning(this, tr("My Calculator"),
tr("Box in da house.\n"), QMessageBox::Cancel, QMessageBox::Cancel);}
signals:
void somethingChanged();
};Ich hoffe ihr könnt mir mit ein paar Tipps weiterhelfen.