2016-11-26 73 views

回答

2

我創建了一個橋QObject,我在實現這個類時遇到的錯誤是我忘了添加@QtCore.pyqtSlot裝飾器,這很重要。

class Bridge(QtCore.QObject): 
    @QtCore.pyqtSlot() 
    def some_slot(): 
     print("Slot Invoked") 

在這裏,我創建了一個QWebEngineViewQWebChannel並設置QWebEnginePage的Web信道爲信道,並且反之亦然。

然後我創造了我的QObject橋在self.helper_bridge第一我沒有用self,只是通過其自身的使用helper_bridge,當然這讓我的應用程序崩潰

class MainWidget(object): 
    def __init__(self): 
     ... 
     self.webView = QtWebEngineWidgets.QWebEngineView(parent) 

     channel = QtWebChannel.QWebChannel(self.webView.page()) 
     self.webView.page().setWebChannel(channel) 

     self.helper_bridge = Bridge() 
     channel.registerObject("helperBridge", self.helper_bridge) 

     url = QtCore.QUrl("file:///path/to/index.html") 
     self.webView().page().load(url) 
     ... 

最後,index.html頁,

請注意Qt提供的第二個腳本。

在這裏,我創建了一個QWebChannel實例給予我的傳輸:qt.webChannelTransport,並在回調中我處理了點擊事件綁定,你可以看到。

<html>                   
    <head>                   
    </head>                  
    <body>                   
     <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js'</script> 
     <script src='qrc:///qtwebchannel/qwebchannel.js'></script> 
     <h1>hello</h1>           
     <ul>             
      <li>list item 1</li>              
      <li>list item 2</li>              
     </ul>                  
     <a href='#go'>GO</a>              
     <script>                  
     $(document).ready(function(){ 
      new QWebChannel(qt.webChannelTransport, function(channel){    
       $('h1').on('click', function({ 
        channel.objects.helperBridge.some_slot() 
       }); 
      }); 
     });                  
     </script> 
    </body> 

參考文獻: