2016-08-07 3 views
0

Я знаю, что QWebEngineProfile и QWebEngineDownloadItem используются для загрузки чего-либо. Но я не понимаю, как это сделать. Я пытаюсь использовать подключения для достижения загрузки. Вот мой кодКак обрабатывать закачки в QWebEngine?

void MainWindow::handleDownloadSlot(QWebEngineDownloadItem *download) { 
    download->accept(); 
} 
void MainWindow::downloadRequested(QWebEngineDownloadItem *download) { 
    download->accept(); 
} 
    connect (pro,SIGNAL(downloadRequested(QWebEngineDownloadItem *)),this,SLOT(handleDownloadSlot(QWebEngineDownloadItem *))); 

ответ

2

Проверьте пример Web Demo Browser, в который входит пример с Менеджером загрузки.

Если вы используете по умолчанию QWebEngineProfile, попробуйте:

connect(QWebEngineProfile::defaultProfile(), SIGNAL(downloadRequested(QWebEngineDownloadItem*)), 
       this, SLOT(downloadRequested(QWebEngineDownloadItem*))); 

Для профиля, определенного в пользовательской QWebEnginePage, попробуйте:

connect(webView->page()->profile(), SIGNAL(downloadRequested(QWebEngineDownloadItem*)), 
       this, SLOT(downloadRequested(QWebEngineDownloadItem*))); 

Теперь обработаем вашу загрузку, чтобы начать:

void MainWindow::downloadRequested(QWebEngineDownloadItem* download) { 
     if (download->savePageFormat() != QWebEngineDownloadItem::UnknownSaveFormat) { 
      qDebug() << "Format: " << download->savePageFormat(); 
      qDebug() << "Path: " << download->path(); 
      // If you want to modify something like the default path or the format 
      download->setSavePageFormat(...); 
      download->setPath(...); 
      // Check your url to accept/reject the download 
      download->accept(); 
     } 
} 

Если вы хотите показать диалог прогресса с downlo ход рекламы, просто используйте сигналы, доступные в классе QWebEngineDownloadItem:

connect(download, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(setCurrentProgress(qint64, qint64))); 
+0

По какой-то причине это не работает для меня. Я нажимаю кнопку загрузки, и ничего не происходит. Он даже ничего не показывает в консоли отладки –

+0

Я портирую с QWebKit на QWebEngine. И был сигнал под названием linkClicked. В WebEngine такого сигнала нет. Может быть, это и есть причина? –

+0

Код работает для меня в Qt 5.7. Если вы хотите обрабатывать каждый URL, проверьте мой ответ в этом сообщении: http://stackoverflow.com/questions/38343790/how-to-use-qwebengineurlrequestinterceptor/38351234#38351234 – mohabouje