Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 脱机使用QNetworkAccessManager_Qt_Qt5_Qnetworkaccessmanager - Fatal编程技术网

Qt 脱机使用QNetworkAccessManager

Qt 脱机使用QNetworkAccessManager,qt,qt5,qnetworkaccessmanager,Qt,Qt5,Qnetworkaccessmanager,我的应用程序由两个应用程序组成。其中一个可能会要求另一个通过REST调用(调用localhost上的URL)执行一些命令。为此,我们使用QNetworkAccessManager(用于put、get和post请求) 现在出现了一个问题—设备有时可能会脱机,当他这样做时—出于某种原因,我们无法通过access manager使用rest调用。当它使用的网络配置被破坏时(如禁用Wifi适配器等),似乎就会发生这种情况。恢复此配置(启用Wifi)后,access manager将再次开始工作 另一个细

我的应用程序由两个应用程序组成。其中一个可能会要求另一个通过REST调用(调用localhost上的URL)执行一些命令。为此,我们使用
QNetworkAccessManager
(用于put、get和post请求)

现在出现了一个问题—设备有时可能会脱机,当他这样做时—出于某种原因,我们无法通过access manager使用rest调用。当它使用的网络配置被破坏时(如禁用Wifi适配器等),似乎就会发生这种情况。恢复此配置(启用Wifi)后,access manager将再次开始工作

另一个细节——当我们离线时启动应用程序时——无论在线状态如何,它都能正常工作。这可能是因为

这在Win和Mac上都可以复制

因此,问题是如何在不考虑设备在线状态的情况下可靠地使用QNetworkAccessManager?我们仅将此管理器用于本地主机REST调用。我应该设置什么默认网络配置或行为

使用示例如下:

mNetManager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setRawHeader("User-Agent", "AppName/1.0");
request.setUrl(QUrl(url));
*reply = mNetManager->get(request);

编辑:不需要联机状态,因为我只需要此访问管理器来访问浏览器上的本地URL

QNetworkAccessManager
具有用于网络可用性的功能。为什么不用呢

QNetworkAccessManager * mNetManager = new QNetworkAccessManager(this);
connect(mNetManager, &QNetworkAccessManager::networkAccessibleChanged,
        this, &YourClass::slotExecutedWhenNetworkAccessibilityChanges);

NetworkAccessibility netAcc = mNetManager->networkAccessible();

switch (netAcc) {
    case QNetworkAccessManager::Accessible:
        // You are online.
        break;

    case QNetworkAccessManager::NotAccessible:
        // You are offline.
        break;

    case QNetworkAccessManager::UnknownAccessibility:
    default:
        // You know nothing, Jon Snow.
        break;
}

您似乎可以强制网络可访问性以获取本地内容:

mNetManager = new QNetworkAccessManager(this);
QNetworkRequest request;
request.setRawHeader("User-Agent", "AppName/1.0");
request.setUrl(QUrl(url));
mNetManager->setNetworkAccessible(QNetworkAccessManager::Accessible); // <--
auto reply = mNetManager->get(request);
mNetManager=新的QNetworkAccessManager(此);
QNetworkRequest请求;
setRawHeader(“用户代理”、“AppName/1.0”);
setUrl(QUrl(url));
mNetManager->SetNetworkAccessManager::Accessable(QNetworkAccessManager::Accessable);//获取(请求);

它肯定与承载管理有关。如果你把你平台的承载插件移开,它能起作用吗?@peppe感谢你的回复,很抱歉我的回答太长了。这个错误出现在qt的承载插件和没有它的情况下。虽然看起来Bearrer插件增加了这个bug的重现率(几乎每次都是,而不是有时)。不幸的是,我无法真正删除它,因为我需要Qt的功能来检测应用程序其他部分的在线状态。它需要持票人plugin@peppe看来你是对的。一旦我从部署脚本中删除libqcorewlanbearer,问题就消失了,性能也提高了。看起来这个插件在Qt5.5.1上确实有漏洞,并且比我发现的问题要多。如果你把它作为答案贴出来,我会接受的,因为是你从一开始就猜对了这是一个选项:这个问题是5.9.2版的。@Morten242谢谢!这正是问题所在。我只知道有些可疑的事情正在发生,但无法把它全部放在一起。谢谢你的回答,我知道这一点。这个问题的重点是在任何情况下都要可靠地使用networkAccessManager。因为连接到本地主机REST服务器不需要联机。但由于某种原因,当联机状态变为脱机或机器进入睡眠状态(这会导致网络设备发生变化)时,我会断开任何连接