我有以下代码:
QNetworkAccessManager nam;
QEventLoop loop;
QNetworkRequest request(_client.url());
QNetworkReply *reply = nam.get(request);
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
info = QSharedPointer<UpdateInformation>(new UpdateInformation(reply));
reply->deleteLater();
这个代码在从Qt Creator执行时工作正常,即使在IDE中运行的另一个应用程序调用此代码(通过QProcess)。
但是,在IDE外部运行时,QNetworkReply
为空(其length()
为0)。我假设这是由错误/错误的版本依赖引起的。我从* c:\ QtSDK \ Desktop \ Qt \ 4.7.4 \ mingw \ bin * 复制了所需的DLL,应用程序运行正常。如何找出IDE实际使用哪些DLL来运行它?如果那不是问题,我怎样才能获得更多信息?
编辑:重组代码以连接到QNetworkAccessManager的finished()
信号后,我发现reply->error()
为QNetworkReply::UnknownNetworkError
。我仍然不知道原因。
解决方案(它不会让我回答它,从现在开始我也不会等待6个小时):
好的,所以我设法解决了。线索是 reply-&gt; errorString(),其中说“创建SSL上下文()时出错”。这很快让我记住这个URL实际上是一个HTTPS网址。经过一番挖掘,我发现为了在Qt(以及HTTPS)中使用SSL功能,需要将以下openssl DLL复制到应用程序文件夹: libeay32.dll 和 ssleay32.dll 即可。就是这样。
答案 0 :(得分:0)
作者的解决方案(他将其发布为问题的答案,但这很容易监督):
好,所以我设法解决了。线索是 reply-> errorString() 其中说“创建SSL上下文()时出错”。那很快导致我 请记住,该URL实际上是一个HTTPS URL。经过一点挖掘 我发现为了在Qt中使用SSL功能(和 因此使用HTTPS),则需要将以下openssl DLL复制到 应用程序文件夹: libeay32.dll 和 ssleay32.dll 。那就是 它。