2010-04-26 17 views
6

Bir C++ nesnesi/işlevi QtWebKit tarayıcısının içinde QtWebKit tarayıcısında çalışan JavaScript'e göstermenin herhangi bir yolu var mı? Adobe AIR'de ActionScript nesnelerini WebKit tarayıcısının içinde çalışan JS koduna maruz bırakmak mümkündür - Qt'de benzer işlevleri arıyorum.Q ++ nesnesinde Javascript'e Expose C++ nesnesi 0t

cevap

2

Evet. this.'a bir göz atın. İyi bir başlangıç ​​olmalı.

+0

Bilgi için teşekkürler! – BlueSilver

4

DÜZENLEME: LİNK ÇALIŞIYOR, AMA SADECE HALİNDE LİNK

bir soru ben #qt ve qt-ilgidir birkaç kez gelip görüldü ettik ... Richard Moore tarafından TEKRAR [Link] KIRIYOR , varsayılan olarak QtWebKit'te bulunanlara özel (uygulamaya özgü) API'ler ekleme. Bu aslında oldukça kolay (bir kez nasıl olduğunu bilirsiniz) aşağıda göstereceğim gibi. Bu gönderi, nesne üzerinde arama yöntemleri ve C++ 'dan değerlerini döndürme de dahil olmak üzere javascript'ten bir nesnenin nasıl kullanılabilir hale getirileceğine dair basit bir örnek gösterecektir.

ilk QWebFrame ait addToJavaScriptWindowObject() yöntemidir, gerçekten bu entegrasyonu gerçekleştirmek için bilmeniz gereken iki şey vardır, bu javascript belirtilen QObject görünür hale getirecek verir. İhtiyacınız olan ikinci şey, 'da yayınlanan nesnelerin, javascript pencere nesnesinin her temizlendiğinde yok olacağıdır - . Kullanıcı her yeni sayfada gezinir. Bunun sorunlarına neden olmasını önlemek için, QWebFrame, nesnenin özel API'sini yeniden eklemenizi sağlayan temizlendiğinde size bildiren bir sinyal sağlar. Bu aslında çok daha basit kulağa geliyor!

bu çekirdek gerçekten örnekte iki yöntem uygulanmaktadır

, bunlar aşağıda gösterildiği konum:

void MyApi::setWebView(QWebView *view) 
{ 
    QWebPage *page = view->page(); 
    frame = page->mainFrame(); 

    attachObject(); 
    connect(frame, SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(attachObject())); 
} 

void MyApi::attachObject() 
{ 
    frame->addToJavaScriptWindowObject(QString("MyApi"), this); 
} 

Bu kod tüm gerçekleştirebilmek için ihtiyaç duyduğu tek şey javascript'in görebileceği MyApi nesnesinin ortak yuvaları. MyAPI sınıfı iki kamu yuvalara sahiptir: (! Evet, yuvaları şeyler dönebilirsiniz)

public slots: 
    void doSomething(const QString &param); 
    int doSums(int a, int b); 

İlk slot basitçe ayıklama çıkışı bir mesaj kaydeder, ikinci döner iki argümanının toplamı .

MyApi.doSomething('Hello from JS page 2!!!!'); 

    sum = MyApi.doSums(2, 3); 
    alert('C++ says the sum is ' + sum); 

Ve bu ona orada hepsi: Onlar böyle javascript deniyor! Kodu http://xmelegance.org/devel/qtwebkitextension.tar.gz'dan indirebilirsiniz.

+0

Bu örnek, maalesef QT5'de işlevsel değildir. Bir güncelleme için herhangi bir şans mı yoksa başka bir soru açmalı mıyım? – Alex