2015-02-17 13 views
14

Çevrede oynamak ve öğrenmek için yeni WebEngine kullanıyorum. Qt WebKit kullanılarak bulunabilir bazı benzer yöntemler bulmaya çalışıyorum: addToJavaScriptWindowObject()Qt WebEngine ve QWebChannel nasıl kullanılır?

Qt WebEngine kullanarak, ben JavaScript pencere nesnesine fonksiyonları kayıt QWebChannel kullanmak zorunda olduğunu buldu. Bu doğruysa, beni şu soruya yönlendirir.

Bilgisayarıma Qt 5.4.0 yükledim. Bilgisayarımda yüklü SDK'da qwebchannel.js'un bulunmadığını fark ettim. Git kaynağında buldum.

QWebEnginePage ve QWebEngineView numaralı bir Qt yerel masaüstü uygulamasına sahipseniz, Javascript pencere nesnesindeki işlevleri kaydedebilmem için neye ihtiyacım var?

Masaüstü uygulamam, otomatik olarak oluşturduğum bir http sayfasına gider. Bu yüzden QWebEngineView'a bağlı içeriğe erişimim var.

Bunu yapabilmek için atılacak adımlar nelerdir?

+0

Bir çözüm bulabildiniz mi? Aynı problemde sıkışmış durumdayım, web sayfamdan C++ 'a kadar bir çeşit iletişim istiyorum (mümkünse js veya başka bir yolla) Lütfen yardım edin .. –

cevap

0

Qt şimdi bu belgelerine sahiptir:

Qt WebChannel Standalone Example

Sen QWebEngineView 'ın HTML/Javascript bir WebSocket'e kullanarak bağlanacak senin cpp uygulamanıza bir QWebSocketServer eklemek zorunda. Daha sonra iki yönlü iletişim için QWebChannel kullanın.

11

Qt5.6'da, iletişim kuracağınız C++ parçası ve JavaScript'i oluşturmak isterseniz, bunu yapmanın tek yolu, belirtildiği gibi QWebEngineView numaralı telefondan QWebChannel kullanıyor. Sadece JS tarafında satışa sunulacak TheNameOfTheObjectUsed adında bir nesneyi kayıt olduğunu söylemek, İşte

m_pView = new QWebEngineView(this); 
QWebChannel * channel = new QWebChannel(page); 
m_pView->page()->setWebChannel(channel); 
channel->registerObject(QString("TheNameOfTheObjectUsed"), this); 

: Bunu .cpp dosyasında bu şekilde yapmak. Şimdi, bu JS tarafında kullanmak için kod parçasıdır: JS tarafında sınıfının bazı özelliklerini almak istiyorsanız,

new QWebChannel(qt.webChannelTransport, function (channel) { 
      // now you retrieve your object 
      var JSobject = channel.objects.TheNameOfTheObjectUsed; 
     }); 

Şimdi, C++ tarafında bir yöntem olması gerekir hangi bir dize, bir tamsayı döndürür uzun ... Bu yer, C++ tarafında neye benzediği senin .h:

Q_INVOKABLE int getInt(); 
Q_PROPERTY(int myIntInCppSide READ getInt); 

Ve şimdi, JS tarafında böyle int olsun:

var myIntInJSside= JSobject.myIntInCppSide; 

Bu çok basit bir açıklama, ve bana çok faydalı olan this video'u izlemenizi tavsiye ederim. Ayrıca, QWebChannel tarafından sağlanan JavaScript API ve QWebChannel ile ilgili belgeler hakkında daha fazla bilgi edinmek isteyebilirsiniz.

Bu yardımcı olur umarım!

+0

Bu bölümü 'qt.webChannelTransport' hakkında nereden buldunuz? Belgelerin herhangi bir yerinde bulamadım ya da örnek ... – sschober

+1

@sschober [QWebEnginePage doc] 'da bulabilirsiniz (http://doc.qt.io/qt-5/qwebenginepage.html): 'Taşıma, Qt WebChannel JavaScript API'sini kullanırken kullanılması gereken qt.webChannelTransport olarak JavaScript dünyasında görünür. – IAmInPLS