QT QWebEngineProcess使用注意事项

一、pro文件中需要添加模块

QT QWebEngineProcess使用注意事项_第1张图片

二、程序打包

除了使用windeployqt.exe打包依赖库以外,还需要手动添加两项文件。
第一步:在你程序bin目录下的translations文件中添加文件夹qtwebengine_locales,并在里面粘贴QT 自带的qtwebengine_locales。QT QWebEngineProcess使用注意事项_第2张图片
QT 自带的在如下目录,将这些文件全部粘贴到你添加的那个文件夹中
QT QWebEngineProcess使用注意事项_第3张图片
第二步:bin目录下添加文件夹resources,并放入5个文件
QT QWebEngineProcess使用注意事项_第4张图片
5个文件在如下目录
QT QWebEngineProcess使用注意事项_第5张图片

三、设置过滤器,拦截请求

使用场景:扫码登录
扫码登录时,如果扫码成功,服务器会回调,返回一个成功登录的URL,URL中含token,就可以验证是否扫码,这样我们就可以直接通过设置过滤器来拦截到这个回调URL
添加过滤器代码

//.h文件
class WebUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
{
    Q_OBJECT

public:
    WebUrlRequestInterceptor(QObject *p = Q_NULLPTR);
    void interceptRequest(QWebEngineUrlRequestInfo &info);

signals:
    void loginFinished();
};
//.cpp文件
WebUrlRequestInterceptor::WebUrlRequestInterceptor(QObject *p)
  :QWebEngineUrlRequestInterceptor(p)
{

}
void WebUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) {
    QString rsrct = "";
    switch(info.resourceType()){
    case 0:rsrct="ResourceTypeMainFrame = 0, // top level page";break;
    case 1:
    {
        rsrct="ResourceTypeSubFrame, // frame or iframe";
        QString url = info.requestUrl().url();
        if (url.contains("https://www.4399.com/api/login?token=")) {
            qDebug()<<"登录成功"<<url;
            emit loginFinished();
        }
        break;
    }
    case 2:rsrct="ResourceTypeStylesheet, // a CSS stylesheet";break;
    case 3:rsrct="ResourceTypeScript, // an external script";break;
    case 4:rsrct="ResourceTypeImage, // an image (jpg/gif/png/etc)";break;
    case 5:rsrct="ResourceTypeFontResource, // a font";break;
    case 6:rsrct="ResourceTypeSubResource, // an other subresource.";break;
    case 7:rsrct="ResourceTypeObject, // an object (or embed) tag for a plugin,";break;
    case 8:rsrct="ResourceTypeMedia, // a media resource.";break;
    case 9:rsrct="ResourceTypeWorker, // the main resource of a dedicated worker.";break;
    case 10:rsrct="ResourceTypeSharedWorker, // the main resource of a shared worker.";break;
    case 11:rsrct="ResourceTypePrefetch, // an explicitly requested prefetch";break;
    case 12:rsrct="ResourceTypeFavicon, // a favicon";break;
    case 13:rsrct="ResourceTypeXhr, // a XMLHttpRequest";break;
    case 14:rsrct="ResourceTypePing, // a ping request for ";break;
    case 15:rsrct="ResourceTypeServiceWorker, // the main resource of a service worker.";break;
    case 16:rsrct="ResourceTypeUnknown";break;

    default : rsrct="未知类型";break;
    }

    qDebug()<<"\t"<<Q_FUNC_INFO<<":\n\t\t" << "WebUrlRequestInterceptor::interceptRequest    " <<info.requestMethod()
         <<"\r\n  "<<info.requestUrl()<<"   "<<rsrct      <<"\r\n";
}
//WebViewForm.cpp文件中
WebUrlRequestInterceptor *ceptor = new WebUrlRequestInterceptor();
profile()->setRequestInterceptor(ceptor);
connect(ceptor, &WebUrlRequestInterceptor::loginFinished,
            this, &WebViewForm::loginFinished);

你可能感兴趣的:(QT)