Sto lavorando con QWeb di QWebView e ho trovato molti grandi usi per l'aggiunta all'oggetto della finestra del webkit.Qt 4.6 Aggiunta di oggetti e oggetti secondari all'oggetto della finestra QWebView (C++ e Javascript)
Una cosa che vorrei fare è oggetti nidificati ... per esempio:
in Javascript che posso ...
var api = new Object;
api.os = new Object;
api.os.foo = function(){}
api.window = new Object();
api.window.bar = function(){}
ovviamente nella maggior parte dei casi questo potrebbe essere fatto attraverso una più OO js-framework.
Questo si traduce in una struttura ordinata di:
>>>api
-------------------------------------------------------
- api Object {os=Object, more... }
- os Object {}
foo function()
- win Object {}
bar function()
-------------------------------------------------------
In questo momento sono in grado di estendere l'oggetto finestra con tutti i ++ metodi e segnali ho bisogno QTc, ma tutti hanno 'sembrano' a deve essere in un figlio di root di "finestra". Questo mi costringe a scrivere un oggetto js wrapper per ottenere la gerarchia che voglio nel DOM.
>>>api
-------------------------------------------------------
- api Object {os=function, more... }
- os_foo function()
- win_bar function()
-------------------------------------------------------
Questo è un esempio abbastanza semplificata ... Voglio oggetti per i parametri, ecc ...
Qualcuno sa di un modo per passare un oggetto figlio con l'oggetto che estende il WebFrame del oggetto finestra?
Ecco qualche esempio di codice di come sto aggiungendo l'oggetto:
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>
Sono ragionevolmente nuovo alla programmazione in C++ (proveniente da uno sfondo Web e Python).
Speriamo che questo esempio serva non solo ad aiutare altri nuovi utenti, ma sia qualcosa di interessante per un programmatore C++ più esperto su cui approfondire.
Grazie per l'assistenza che può essere fornita.:)