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 に答える