代码之家  ›  专栏  ›  技术社区  ›  Piotr Dobrogost

使用QtWebKit时,如何知道何时加载网页?

  •  13
  • Piotr Dobrogost  · 技术社区  · 15 年前

    QWebFrame QWebPage void loadFinished(bool ok)

    4 回复  |  直到 14 年前
        1
  •  13
  •   Rob Knight    15 年前

    我还没做过,但我想你 也许 QNetworkAccessManager .

    您可以使用从QWeb页面获取QNetworkAccessManager networkAccessManager() 作用QNetworkAccessManager有一个信号 finished ( QNetworkReply * reply )

    这个 finished signal为您提供一个QNetworkReply实例,您可以从中获取原始请求的副本,以便识别该请求。

    因此,请创建一个插槽以连接到 完成 信号,使用传入的QNetworkReply的方法来确定哪个文件刚刚完成下载,如果是您的Ajax请求,则执行您需要执行的任何处理。

    另一种选择可能是使用QWebFrame的方法将对象插入页面的对象模型,并插入一些JavaScript,当Ajax请求完成时,JavaScript会通知您的对象。这是一种略为粗糙的方法,但肯定会奏效。

    编辑:

    第二种选择对我来说似乎更好。工作流程如下:

    在该函数中放入所需的任何代码。您可能希望通过QWebFrame::addToJavaScriptWindowObject()向页面添加QObject,然后调用该对象上的函数。此代码仅在页面完全加载时执行。

    希望这能回答这个问题!

        2
  •  2
  •   user1006989 user1006989    12 年前

    要检查特定图元的荷载,可以使用 QTimer . python中的类似内容:

    @pyqtSlot()
    def on_webView_loadFinished(self): 
        self.tObject = QTimer()
        self.tObject.setInterval(1000)
        self.tObject.setSingleShot(True)
        self.tObject.timeout.connect(self.on_tObject_timeout)
        self.tObject.start()
    
    @pyqtSlot()
    def on_tObject_timeout(self):
        dElement = self.webView.page().currentFrame().documentElement()
        element  = dElement.findFirst("css selector")
        if element.isNull():
            self.tObject.start()
    
        else:
            print "Page loaded"
    
        3
  •  1
  •   Shaun    15 年前

    当您的初始html/images/etc完成加载时,就是这样。信息技术 满载的。如果您随后决定使用一些javascript来获取额外的数据、页面视图或其他内容,那么这一事实不会改变。

    也就是说,我怀疑你想在这里做的是将一个QtScript对象/接口暴露给你的视图,你可以从页面的脚本中调用它,一旦你已经决定(从页面脚本)你已经“完全加载”,就有效地提供了一个“回调”到C++中。

    希望这能给你一个尝试的方向。。。

        4
  •  0
  •   Silicomancer    10 年前

    非常 短时间延迟解决了问题。存在导致所述行为的错误:

    https://bugreports.qt-project.org/browse/QTBUG-37377