Обработка ошибок в QWebView / QWebPage

Я хочу получить больше информации, чем просто 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);

Я немного не уверен относительно времени жизни объекта QWebPage в QWebView, но из моих тестов кажется, что QWebPage всегда остается тем же экземпляром и просто загружает новый контент. Поэтому я предположил, что должен просто передать свою страницу в QWebView, я не нашел другого способа заставить его использовать мой производный класс. Но при загрузке поддельных URL, несуществующих локальных файлов или неподдерживаемого содержимого, либо через WebView, либо напрямую через мэйнфрейм страницы, я никогда не получаю вызов с информацией ErrorPageExtension.

Любая помощь приветствуется. Это использует Qt 4.8.2.

1 ответ

Решение

Есть небольшая ошибка:

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

Вы забыли скопировать модификатор const.

Другие вопросы по тегам