Как знать, когда веб-страница загружается при использовании QtWebKit?

Обобщение \bug и \todo \xrefitem.

решение, которое я предлагаю:

  • в Doxyfile:

    ALIASES += "req=\xrefitem req \"Requirement\" \"Requirements\" "
    
  • в зарегистрированном коде:

    /// \req #42 - The system shall work in any situation
    
14
задан Piotr Dobrogost 1 January 2011 в 19:04
поделиться

2 ответа

На самом деле я этого не делал, но думаю, что вы можете получить свое решение, используя QNetworkAccessManager .

Вы можете получить QNetworkAccessManager из вашей QWebPage с помощью функции networkAccessManager () . QNetworkAccessManager имеет сигнал завершен (QNetworkReply * reply) , который запускается всякий раз, когда файл запрашивается экземпляром QWebPage.

Сигнал завершен дает вам экземпляр QNetworkReply, из которого вы может получить копию сделанного исходного запроса, чтобы идентифицировать запрос.

Итак, создайте слот для присоединения к сигналу finished , используйте переданные методы QNetworkReply, чтобы выяснить, какой файл только что закончил загрузку, и если это ваш запрос Ajax, выполняйте любую необходимую обработку.

Единственное предостережение: я никогда не делал этого раньше, поэтому я не уверен на 100%, что это сработает.

Другой альтернативой может быть использование методов QWebFrame для вставки объектов в объектную модель страницы, а также вставить некоторый JavaScript, который затем уведомляет ваш объект, когда запрос Ajax завершен. Это немного более хакерский способ, но он определенно должен сработать.

РЕДАКТИРОВАТЬ:

Второй вариант мне кажется лучше. Рабочий процесс выглядит следующим образом:

Присоедините слот к сигналу QWebFrame :: javascriptWindowObjectCleared (). На этом этапе вызовите QWebFrame :: valuJavascript (), чтобы добавить код, подобный следующему:

Другой альтернативой может быть использование методов QWebFrame для вставки объектов в объектную модель страницы, а также вставку некоторого кода JavaScript, который затем уведомляет ваш объект о завершении запроса Ajax. Это немного более хакерский способ, но он определенно должен сработать.

РЕДАКТИРОВАТЬ:

Второй вариант мне кажется лучше. Рабочий процесс выглядит следующим образом:

Присоедините слот к сигналу QWebFrame :: javascriptWindowObjectCleared (). На этом этапе вызовите QWebFrame :: valuJavascript (), чтобы добавить код, подобный следующему:

Другой альтернативой может быть использование методов QWebFrame для вставки объектов в объектную модель страницы, а также вставку некоторого кода JavaScript, который затем уведомляет ваш объект о завершении запроса Ajax. Это немного более хакерский способ, но он определенно должен сработать.

РЕДАКТИРОВАТЬ:

Второй вариант мне кажется лучше. Рабочий процесс выглядит следующим образом:

Присоедините слот к сигналу QWebFrame :: javascriptWindowObjectCleared (). На этом этапе вызовите QWebFrame :: valuJavascript (), чтобы добавить код, подобный следующему:

Присоедините слот к сигналу QWebFrame :: javascriptWindowObjectCleared (). На этом этапе вызовите QWebFrame :: valuJavascript (), чтобы добавить код, подобный следующему:

Присоедините слот к сигналу QWebFrame :: javascriptWindowObjectCleared (). На этом этапе вызовите QWebFrame :: valuJavascript (), чтобы добавить код, подобный следующему: window.onload = function () {// страница полностью загружена}

Поместите в эту функцию любой код, который вам нужен. Возможно, вы захотите добавить QObject на страницу через QWebFrame :: addToJavaScriptWindowObject (), а затем вызвать функцию для этого объекта. Этот код будет выполняться только тогда, когда страница полностью загружена.

Надеюсь, это ответит на вопрос!

12
ответ дан 1 December 2019 в 14:22
поделиться

Когда ваш начальный html / images / etc загружается, готово. Он полностью загружен. Этот факт не изменится, если вы затем решите использовать некоторый javascript для получения дополнительных данных, просмотров страниц или чего-то еще.

Тем не менее,

1
ответ дан 1 December 2019 в 14:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: