2

success = false我希望获得更多信息,而不仅仅是loadFinished(这通常只是取消加载)。从该站点上的文档和其他帖子中,我收集到我应该继承 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。

4

1 回答 1

3

有一点错误:

...
virtual bool supportsExtension(Extension extension) const // const!!!
{
    return QWebPage::ErrorPageExtension === extension;
}
...

您忘记复制const修饰符。

于 2013-01-25T21:03:56.550 回答