QtWebEngine:使用HTTPPost加载URL

QtWebEngine:使用HTTPPost加载URL,qt,qtwebengine,qtwebview,Qt,Qtwebengine,Qtwebview,我正在将一个内部浏览器从QtWebKit移植到QtWebEngine 我想要一个函数来请求url,同时发布一些数据。 使用WebKit,我可以使用以下功能: 使用从QtWebView派生的WebView类: void WebView::loadPostUrl(const QUrl &url, QByteArray postdata) { m_initialUrl = url; QNetworkRequest request = QNetworkRequest(url);

我正在将一个内部浏览器从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相同的功能

谢谢

我的解决方案是使用脚本登录,而不是模拟Post操作

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);
可选的最后一个参数(此处未显示)是一个lambda函数,它在JavaScript函数退出并接收最后一个值输出时执行

文档中没有明确的主题,但我认为函数是从主线程异步执行的——否则您只会阻塞执行并等待,而不是传入一个可选的lambda/functor/function指针以供以后执行。

我的解决方案是使用脚本来编写登录,而不是模拟Post操作

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);
可选的最后一个参数(此处未显示)是一个lambda函数,它在JavaScript函数退出并接收最后一个值输出时执行


文档中没有明确的主题,但我认为函数是从主线程异步执行的——否则您只会阻塞执行并等待,而不是传入一个可选的lambda/functor/function指针以供以后执行。

您可以让它加载一个网页,然后该网页再执行POST请求。我的QT应用程序具有要发布到该URL的参数值。你想让我用GET中的参数调用另一个url,然后用POST调用主url?这是一种方法。另一种方法是通过WebSocket将数据发送到页面。所有这些方法都需要访问和修改服务器端,我不想这样做。关于使用QWebEngine发布的任何消息?Me在将QWebView::load()调用移植到QWebEngine时也会遇到同样的问题……您可以让它加载一个网页,然后该网页反过来执行POST请求。我的QT应用程序具有要发布到该URL的参数值。你想让我用GET中的参数调用另一个url,然后用POST调用主url?这是一种方法。另一种方法是通过WebSocket将数据发送到页面。所有这些方法都需要访问和修改服务器端,我不想这样做。关于使用QWebEngine发布的任何消息?Me在将QWebView::load()调用移植到QWebEngine时也存在同样的问题。。。