Seite 1 von 1

Webkit, wie Signale in Javascript verbinden und verarbeiten?

Verfasst: 27. Juli 2009 16:16
von tmayer
Hi,

ich verwende QWebkit um eine (interne) Htmlseite anzuzeigen. Auf dieser Webseite würde ich gerne per Javascript versschiedene Signale mit "Slots" im Javascript-Code verknüpfen. Kann mir jemand verraten wie ich das hin bekomme?

Was ich habe:
Javascript

Code: Alles auswählen

var ConfigSignalHandler = {
    // This is the method which i like to get called on signal "saved"
    saved: function(ok) {
        if (ok) {
            alert("Config saved!");
        } else {
            alert("Failed to save config!");
        }
    }
}

function ctest() {
    // config is a QObject which i registered to javascript with QWebFrame::addToJavaScriptWindowObject
    // this call is working, i see my qDebug() output
    config.save();
}

// "2saved(bool)" is what SLOT(saved(bool)) would have returned
// "1saved(bool)" is what SIGNAL(saved(bool)) would have returned
qwin.connect(config, "2saved(bool)", ConfigSignalHandler, "1saved(bool)");
"qwin" ist mein Hauptfenster. Hier habe ich folgenden Code(Slot) drin:

Code: Alles auswählen

// Javascript won't pass strings as char* so we need to make a wrapper with QString
bool MainWindowImpl::connect(QObject* sender, QString signal, QObject* receiver, QString method) {
    return QObject::connect(sender, signal.toStdString().c_str(), receiver, method.toStdString().c_str());
}
Da "ConfigSignalHandler" kein QObject ist kann ich diese Methode natürlich nicht verwenden.
Hat jemand eine Idee wie ich das noch lösen kann? Wichtig ist nur dass der Code auf C++/QT-Seite generisch ist, ich also alleine durch Javascript neue Signale verbinden und verarbeiten kann.

Danke Tobi

PS: Das ganze hab ich auf englisch auchschon hier gepostet: http://www.qtforum.org/article/28395/we ... cript.html

Verfasst: 27. Juli 2009 16:48
von tmayer
Den ganzen Tag hab ich rumgesucht ... und grade was gefunden als ich schauen wollte wie man es mit QtScript machen würde.

Einfach im JavaScript-Code der im Webkit läuft

Code: Alles auswählen

config.saved.connect(function(ok) { machWas; });
"config" ist mein QObject und "saved" das Signal.

So simpel kann die Welt sein.