webpage.cpp

转载 2017年01月03日 21:45:49
#include "browserwindow.h"
#include "tabwidget.h"
#include "ui_certificateerrordialog.h"
#include "ui_passworddialog.h"
#include "webpage.h"
#include "webview.h"
#include <QAuthenticator>
#include <QMessageBox>

WebPage::WebPage(QWebEngineProfile *profile, QObject *parent)
    : QWebEnginePage(profile, parent)
{
    connect(this, &QWebEnginePage::authenticationRequired, this, &WebPage::handleAuthenticationRequired);
    connect(this, &QWebEnginePage::proxyAuthenticationRequired, this, &WebPage::handleProxyAuthenticationRequired);
}

bool WebPage::certificateError(const QWebEngineCertificateError &error)
{
    QWidget *mainWindow = view()->window();
    if (error.isOverridable()) {
        QDialog dialog(mainWindow);
        dialog.setModal(true);
        dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
        Ui::CertificateErrorDialog certificateDialog;
        certificateDialog.setupUi(&dialog);
        certificateDialog.m_iconLabel->setText(QString());
        QIcon icon(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxWarning, 0, mainWindow));
        certificateDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32));
        certificateDialog.m_errorLabel->setText(error.errorDescription());
        dialog.setWindowTitle(tr("Certificate Error"));
        return dialog.exec() == QDialog::Accepted;
    }

    QMessageBox::critical(mainWindow, tr("Certificate Error"), error.errorDescription());
    return false;
}

void WebPage::handleAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *auth)
{
    QWidget *mainWindow = view()->window();
    QDialog dialog(mainWindow);
    dialog.setModal(true);
    dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);

    Ui::PasswordDialog passwordDialog;
    passwordDialog.setupUi(&dialog);

    passwordDialog.m_iconLabel->setText(QString());
    QIcon icon(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow));
    passwordDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32));

    QString introMessage(tr("Enter username and password for \"%1\" at %2")
                         .arg(auth->realm()).arg(requestUrl.toString().toHtmlEscaped()));
    passwordDialog.m_infoLabel->setText(introMessage);
    passwordDialog.m_infoLabel->setWordWrap(true);

    if (dialog.exec() == QDialog::Accepted) {
        auth->setUser(passwordDialog.m_userNameLineEdit->text());
        auth->setPassword(passwordDialog.m_passwordLineEdit->text());
    } else {
        // Set authenticator null if dialog is cancelled
        *auth = QAuthenticator();
    }
}

void WebPage::handleProxyAuthenticationRequired(const QUrl &, QAuthenticator *auth, const QString &proxyHost)
{
    QWidget *mainWindow = view()->window();
    QDialog dialog(mainWindow);
    dialog.setModal(true);
    dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);

    Ui::PasswordDialog passwordDialog;
    passwordDialog.setupUi(&dialog);

    passwordDialog.m_iconLabel->setText(QString());
    QIcon icon(mainWindow->style()->standardIcon(QStyle::SP_MessageBoxQuestion, 0, mainWindow));
    passwordDialog.m_iconLabel->setPixmap(icon.pixmap(32, 32));

    QString introMessage = tr("Connect to proxy \"%1\" using:");
    introMessage = introMessage.arg(proxyHost.toHtmlEscaped());
    passwordDialog.m_infoLabel->setText(introMessage);
    passwordDialog.m_infoLabel->setWordWrap(true);

    if (dialog.exec() == QDialog::Accepted) {
        auth->setUser(passwordDialog.m_userNameLineEdit->text());
        auth->setPassword(passwordDialog.m_passwordLineEdit->text());
    } else {
        // Set authenticator null if dialog is cancelled
        *auth = QAuthenticator();
    }
}

同步下载和异步下载

一、同步下载(交互不好,容易出现卡死现象,一般下载数据较小或有特定需求才使用)。  发送同步请求后,程序将停止用户交互,直到服务器返回数据完成后,才进行下一步的操作。 步骤: 1.创建NS...
  • Xcocode_ios
  • Xcocode_ios
  • 2013年10月29日 19:15
  • 451

文件上传与下载--下载

1、下载servletpublic class DownLoadServlet extends HttpServlet{ /** * */ private sta...
  • csdnindex
  • csdnindex
  • 2017年06月19日 18:59
  • 87

同步下载与异步下载

*************************************************** 同步下载 以下方式下载的话,如果文件过大  会停留在获取NSData的那一行代码  直到全部下载...
  • yuanwenyan
  • yuanwenyan
  • 2016年02月19日 09:27
  • 141

文件下载和批量下载

/**      *       * @Title downFileByZip       * @Description 文件批量下载(zip格式)       * @param list ...
  • wyazyf
  • wyazyf
  • 2017年05月11日 10:54
  • 70

下载图片,下载文件

package com.example.test3;import java.io.File;import java.io.FileOutputStream;import java.io.InputSt...
  • RootYxb
  • RootYxb
  • 2016年06月02日 16:16
  • 144

单线程下载和多线程下载

单线程下载1.单线程下载比较简单,就是开启一个线程,然后打开URL连接按照字节的方式读取流,写入文件就可了 2.用AsyncTask实现单线程下载class DownLoadSingle exten...
  • ForrestL
  • ForrestL
  • 2015年09月14日 21:54
  • 297

同步下载和异步下载

什么时候需要自定义view 1 需要特殊的图形 2 需要控制触摸事件的时候 同步下载模型 由上图可知:同步下载需要三步 1 由手机客户端向服务器端发起请求,服务器端接受请求,并且剖析...
  • u012890117
  • u012890117
  • 2013年12月26日 15:32
  • 512

下载网页_重试下载

1.4.1下载网页 这是《用python写网络爬虫》中的一小节,都是书上的内容(后面的代码分析也是基于这本书的),只不过书上是python2,我改成了python3 简单修改后的代码是这样的: ...
  • weixin_38097576
  • weixin_38097576
  • 2018年01月08日 15:35
  • 75

多线程下载断点下载

public class MutileThreadDownload { /** * 线程的数量 */ private static int threadCount ...
  • qq_20261343
  • qq_20261343
  • 2015年11月05日 23:25
  • 132

单线程下载和多线程下载

  • bianshaopeng
  • bianshaopeng
  • 2015年09月14日 22:26
  • 137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:webpage.cpp
举报原因:
原因补充:

(最多只允许输入30个字)