Slots durch JavaScript auslösen (QtScript)

Alles rund um die Programmierung mit Qt
Antworten
solni
Beiträge: 6
Registriert: 16. Januar 2009 13:19

Slots durch JavaScript auslösen (QtScript)

Beitrag von solni »

Hallo,

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();
};
Laut Qt-Doku steht mir nun also ein Objekt "myObject" und dessen Slot "somethingChanged()" zur Verfügung. Ich habe es so verstanden, dass ich den Slot nun (im Skript) durch myObject.somethingChanged(); aufrufen kann. Leider tut sich aber überhaupt nichts und ich kann nicht sicher sagen ob mein Fehler im Qt-Code oder im JavaScript-Code liegt.
Ich hoffe ihr könnt mir mit ein paar Tipps weiterhelfen.
Antworten