16,818
社区成员




QNetworkRequest request;
QByteArray line;
request.setUrl(QUrl("http://192.168.1.117:8070/api/yakInterface/yakRecordRealPosition/addYakRecordRealPosition"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
QByteArray append("{\"id\":null,\"simCode\":134.0,\"longitude\":12345.0,\"latitude\":12345.0,\"height\":15.0,\"time\":12345,\"deviceCode\":\"M110 - niu\",\"speed\":180}");
QNetworkReply* reply = m_pNetWorkManager->post(request, append);
QEventLoop loop;
QNetworkRequest request;
QByteArray line;
request.setUrl(QUrl(SERVERCONFIG.GetBaseDBIpInfo().append(SERVERCONFIG.GetBaseDBApi())));
request.setHeader(QNetworkRequest::ContentTypeHeader, HTTP_HEADER);
QNetworkReply* reply = m_pNetWorkManager->post(request, GetData());
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
数据才能发送成功,但是这样同步的话,会导致效率不是很高,有没有其他的什么解决方法?
注:我开启了LibEvent的事件循环,导致无法开启Qt的事件循环,就只有用同步的方法,有没有在不开启Qt的事件循环的情况下,使用异步的方式?
QNetworkReply* reply = m_pNetWorkManager->post(request, append);
这句代码执行完之后,执行流程需要回到事件循环当中,post才会被执行。
可以向下面这样异步执行:
void on_button_clicked()
{
QNetworkRequest request;
QByteArray line;
request.setUrl(QUrl("http://192.168.1.117:8070/api/yakInterface/yakRecordRealPosition/addYakRecordRealPosition"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
QByteArray append("{\"id\":null,\"simCode\":134.0,\"longitude\":12345.0,\"latitude\":12345.0,\"height\":15.0,\"time\":12345,\"deviceCode\":\"M110 - niu\",\"speed\":180}");
m_reply = m_pNetWorkManager->post(request, append);
connect(m_reply, &QNetworkReply::finished, this, &MainWindow::on_reply_finished);
}
void on_reply_finished()
{
if (m_reply->error() == QNetworkReply::NoError) {
// 成功
} else {
// 失败
}
}
或者同步:
void on_button_clicked()
{
QNetworkRequest request;
QByteArray line;
request.setUrl(QUrl("http://192.168.1.117:8070/api/yakInterface/yakRecordRealPosition/addYakRecordRealPosition"));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
QByteArray append("{\"id\":null,\"simCode\":134.0,\"longitude\":12345.0,\"latitude\":12345.0,\"height\":15.0,\"time\":12345,\"deviceCode\":\"M110 - niu\",\"speed\":180}");
QNetworkReply *reply = m_pNetWorkManager->post(request, append);
QEventLoop loop;
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
if (reply->error() == QNetworkReply::NoError) {
// 成功
} else {
// 失败
}
}