मैं क्यूटी के QWebView के साथ काम कर रहा हूँ, और वेबकिट विंडो ऑब्जेक्ट को जोड़ने के लिए महान का उपयोग करता है के बहुत सारे खोजने की है।क्यूटी 4.6 जोड़ना वस्तुओं और QWebView विंडो ऑब्जेक्ट को उप वस्तुओं (सी ++ और जावास्क्रिप्ट)
जावास्क्रिप्ट मैं यह कर सकते हैं में...
var api = new Object;
api.os = new Object;
api.os.foo = function(){}
api.window = new Object();
api.window.bar = function(){}
जाहिर है ज्यादातर मामलों में यह एक और अधिक के माध्यम से किया जाएगा:
एक बात मैं करना चाहते हैं नेस्टेड वस्तुओं ... उदाहरण के लिए है ओओ जेएस-फ्रेमवर्क।
यह की एक साफ संरचना में जो परिणाम:
>>>api
-------------------------------------------------------
- api Object {os=Object, more... }
- os Object {}
foo function()
- win Object {}
bar function()
-------------------------------------------------------
अभी मैं QTC++ तरीकों और संकेतों मैं जरूरत के सभी के साथ खिड़की वस्तु का विस्तार करने में सक्षम हूँ, लेकिन वे सभी के लिए 'लगते हैं' "खिड़की" के मूल बच्चे में होना चाहिए। यह मैं मजबूर कर रहा है एक js आवरण वस्तु लिखने के पदानुक्रम है कि मैं डोम में चाहते हैं।
>>>api
-------------------------------------------------------
- api Object {os=function, more... }
- os_foo function()
- win_bar function()
-------------------------------------------------------
यह एक बहुत सरल उदाहरण है ... मैं मानकों, आदि के लिए वस्तुओं चाहते हैं ...
किसी को भी एक तरह से पता है कि वस्तु WebFrame की फैली हुई है के साथ एक बच्चे को वस्तु पारित करने के लिए खिड़की वस्तु?
यहाँ के कुछ उदाहरण कोड है कि कैसे मैं वस्तु जोड़ रहा:
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>
मैं यथोचित सेल्सियस तक ++ प्रोग्रामिंग नया हूँ (एक वेब और अजगर पृष्ठभूमि से आ रहा है)।
उम्मीद है कि इस उदाहरण न केवल अन्य नए उपयोगकर्ताओं की मदद करने की सेवा है, लेकिन एक अधिक अनुभवी C++ प्रोग्रामर पर विस्तृत करने के लिए कुछ दिलचस्प होगा।
किसी भी सहायता की है कि प्रदान की जा सकती के लिए धन्यवाद।:)