LINUX.ORG.RU

[QT]evaluateJavaScript


0

1

Собственно сабж. Решил на досуге поиграться с qt && js, сделал пару набросков по примерам в гугле: main.cpp

#include <QtCore>
#include <QtGui>
#include <QtWebKit>
#include <QWebView>
#include <QWebFrame>
#include <QObject>


int main(int argc, char* argv[]){
	
  QApplication app(argc, argv);
  QWebView *view = new QWebView;
  Foo foo;
  view->load(QUrl("file:///home/userx/qwe/test.html"));
  QObject::connect(view, SIGNAL(loadFinished(bool)), &foo, SLOT(loadFinished(bool)));
  view->show();

  return app.exec();
}
myfunc.cpp
#include "myfunc.h"

Foo::Foo(QObject* parent) :QObject(parent)
{

}

void Foo::loadFinished(bool){
	QVariant f1result = ((QWebView*)sender())->page()->mainFrame()->evaluateJavaScript("f1('test param')");
	qDebug() << f1result.toString();
};

QVariant Foo::Send(QString s){
	QString to_send = "f1('"+s+"')";
	qDebug()<<"We send: "+to_send;
	return ((QWebView*)sender())->page()->mainFrame()->evaluateJavaScript(to_send);
}

#include <QtGui>
#include <QApplication>
#include "myfunc.h"
myfunc.h
#ifndef MYFUNC_H
#define MYFUNC_H

#include <QObject>
#include <string>

//Для поддержки сигналов и слотов наследуем QObject
class Foo: public QObject {
	Q_OBJECT
public:
	//Конструктор
	Foo(QObject* parent = 0);
QVariant Send(QString txt);

public slots:
	void loadFinished(bool);
};

#endif
Собственно, что хочу: вызвать из C++, функцию на JS. Метод со слотом работает, а вот Send нет. Если кто с таким сталкивался, пните в нужное направление :)

P.S. test.html http://paste.org.ru/?v6sa1g

★★★★★

Не совсем по теме, но…

Эээ… а это нормально, что ты сначала делаешь .load, а потом зовёшь connect?

Deleted ()

Есть же QtScript, зачем такое нужно?

unfo ★★★★★ ()
Ответ на: комментарий от unfo

Это первое что попалось под руку ... Можно пример, на QtScript ?

joy4eg ★★★★★ ()
Ответ на: комментарий от unfo

Весьма не плохо, нужно будет изучить, но все же не совсем то, т.к. Я хотел вызвать в произвольный момент времени js функцию, и передать ей аргументы ( evaluateJavaScript(«f1('test param')») ), а сама же функция, объявлена в html файле, который отображается через QWebView.

joy4eg ★★★★★ ()
Ответ на: комментарий от joy4eg

Ааа, ясно :) Любопытно, можно делать, например, модульные тесты для JS функций с помощью Qt))

unfo ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.