处理 QWebView / QWebPage 中的错误

Posted

技术标签:

【中文标题】处理 QWebView / QWebPage 中的错误【英文标题】:Handling errors in QWebView / QWebPage 【发布时间】:2013-01-25 18:23:40 【问题描述】:

我希望在loadFinished 中获得比success = false 更多的信息(这通常只是取消加载)。从该站点上的文档和其他帖子中,我收集到我应该继承 QWebPage 并覆盖 extension() 方法来处理 ErrorPageExtension。

但是,我没有让它工作,也就是说,无论我尝试什么,我的扩展方法都不会被调用。我可能正在做一些非常愚蠢的事情,但没有看到它。基本上我的课是这样的:

class MyWebPage : public QWebPage

  Q_OBJECT

public:

  MyWebPage(QObject* parent = 0) : QWebPage(parent)   

  virtual bool extension(Extension extension,
                         const ExtensionOption* option = 0, 
                         ExtensionReturn* output = 0)
  
    // blah
  

  virtual bool supportsExtension(Extension extension)
  
    // blah
    
;

方法的实现不是问题,我在那里有一个断点,它永远不会被调用。我创建了一个类似

的实例
MyWebPage* page = new MyWebPage(this);

mUi.WebView->setPage(page);

我有点不确定 QWebView 中 QWebPage 对象的生命周期,但从我的测试来看,QWebPage 似乎始终保持相同的实例并且只是加载新内容。所以我认为我应该简单地将我的页面提供给 QWebView,我没有看到另一种让它使用我的派生类的方法。但是,当通过 WebView 或直接通过页面的大型机加载虚假 URL、不存在的本地文件或不受支持的内容时,我从未收到带有 ErrorPageExtension 信息的调用。

感谢任何帮助。这是使用 Qt 4.8.2。

【问题讨论】:

【参考方案1】:

有一点错误:

...
virtual bool supportsExtension(Extension extension) const // const!!!

    return QWebPage::ErrorPageExtension === extension;

...

您忘记复制 const 修饰符。

【讨论】:

啊……就是这样,谢谢你的指点!我认为本可以在看不到它的情况下再盯着它看几个小时;) 是的,这就是为什么 C# 有 override 关键字:)

以上是关于处理 QWebView / QWebPage 中的错误的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4.QtWebKit:加载停止时 QWebPage QWebView 设置超时

Qt 5.3 使用原来的QT4.8.4项目时QWebView QWebFrame

python3.4中的QWebPage和pymongo在哪里可以找到?

从 C++ 访问 QML WebView

使用 PySide 覆盖 QWebPage 中的 shouldInterruptJavaScript

如何使用 QtWebKit 设置浏览器的大小