Estoy trabajando con QWebView de Qt, y he encontrado muchos usos geniales para agregar al objeto de la ventana de webkit.Qt 4.6 Agregar objetos y subobjetos al objeto de la ventana QWebView (C++ y Javascript)
Una cosa que me gustaría hacer es objetos anidados ... por ejemplo:
en Javascript que pueda ...
var api = new Object;
api.os = new Object;
api.os.foo = function(){}
api.window = new Object();
api.window.bar = function(){}
, obviamente, en la mayoría de los casos esto se llevaría a cabo a través de una mayor OO js-framework.
Esto se traduce en una estructura ordenada de:
>>>api
-------------------------------------------------------
- api Object {os=Object, more... }
- os Object {}
foo function()
- win Object {}
bar function()
-------------------------------------------------------
En este momento soy capaz de ampliar el objeto de la ventana con todos los QTC++ métodos y señales que necesito, pero todos ellos tienen 'parecer' a tiene que estar en un hijo raíz de "ventana". Esto me obliga a escribir un objeto js wrapper para obtener la jerarquía que quiero en el DOM.
>>>api
-------------------------------------------------------
- api Object {os=function, more... }
- os_foo function()
- win_bar function()
-------------------------------------------------------
Este es un ejemplo muy simplificado ... Quiero objetos de parámetros, etc ...
¿Alguien sabe de una manera de pasar un objeto hijo con el objeto que se extiende la WebFrame de objeto de ventana?
Aquí hay un código de ejemplo de la forma en que estoy añadiendo el objeto:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
#include <QWebFrame>
#include "mainwindow.h"
#include "happyapi.h"
class QWebView;
class QWebFrame;
QT_BEGIN_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
private slots:
void attachWindowObject();
void bluesBros();
private:
QWebView *view;
HappyApi *api;
QWebFrame *frame;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include <QDebug>
#include <QtGui>
#include <QWebView>
#include <QWebPage>
#include "mainwindow.h"
#include "happyapi.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
view = new QWebView(this);
view->load(QUrl("file:///Q:/example.htm"));
api = new HappyApi(this);
QWebPage *page = view->page();
frame = page->mainFrame();
attachWindowObject();
connect(frame,
SIGNAL(javaScriptWindowObjectCleared()),
this, SLOT(attachWindowObject()));
connect(api,
SIGNAL(win_bar()),
this, SLOT(bluesBros()));
setCentralWidget(view);
};
void MainWindow::attachWindowObject()
{
frame->addToJavaScriptWindowObject(QString("api"), api);
};
void MainWindow::bluesBros()
{
qDebug() << "foo and bar are getting the band back together!";
};
happyapi.h
#ifndef HAPPYAPI_H
#define HAPPYAPI_H
#include <QObject>
class HappyApi : public QObject
{
Q_OBJECT
public:
HappyApi(QObject *parent);
public slots:
void os_foo();
signals:
void win_bar();
};
#endif // HAPPYAPI_H
happyapi.cpp
#include <QDebug>
#include "happyapi.h"
HappyApi::HappyApi(QObject *parent) :
QObject(parent)
{
};
void HappyApi::os_foo()
{
qDebug() << "foo called, it want's it's bar back";
};
example.htm
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Stackoverflow Question</title>
<script type='text/javascript'
src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
</head>
<body>
<button type="button" onclick="api.os_foo()">Foo</button>
<button type="button" onclick="api.win_bar()">Bar</button>
</body>
</html>
Soy bastante nuevo en la programación C++ (proveniente de un fondo web y python).
Afortunadamente, este ejemplo servirá no solo para ayudar a otros usuarios nuevos, sino también como algo interesante para un programador C++ más experimentado.
Gracias por cualquier ayuda que pueda ser proporcionada.:)