QtWebEngine:使用HTTPPost加载URL

时间:2016-01-30 17:27:57

标签: qt qtwebengine qtwebview

我将内部浏览器从QtWebKit移植到QtWebEngine。

我想要一个函数在发布一些数据时请求url。 使用WebKit,我可以使用以下内容:

使用从QtWebView派生的类WebView:

void WebView::loadPostUrl(const QUrl &url, QByteArray postdata)
{
    m_initialUrl = url;
    QNetworkRequest request = QNetworkRequest(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    load(request, QNetworkAccessManager::PostOperation, postdata);
}

由于QtWebEngine确实与QNetworkAccessManager交互,我们如何才能与QtWebEngine具有相同的功能?

由于

1 个答案:

答案 0 :(得分:1)

我的解决方案是使用QWebEnginePage::runJavaScript()编写登录脚本,而不是模拟后期操作。

QString strLoginScript(
    "var formElts = document.getElementById('formSignIn').elements;"
    "formElts['inputLoginName'].value = '%1';"
    "formElts['inputPassword'].value = '%2';"
    "formElts['btnSignIn'].click();")
    .arg(strUsername)
    .arg(strPassword);

// execute JavaScript code on current page
webEngineView->page()->runJavaScript(strLoginScript);

可选的last参数(此处未显示)是一个lambda函数,在JavaScript函数退出并接收最后一个值时执行。

关于这个主题的文档不清楚,但我认为该函数是从主线程异步执行的 - 否则你只会阻止执行并等待,而不是传入一个可选的lambda / functor / function-pointer来执行。