QNetworkReply :: UnknownNetworkError при работе вне IDE - PullRequest
4 голосов
/ 04 февраля 2012

У меня есть следующий код:

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). Я предполагаю, что это вызвано неуместной / неправильной зависимостью версии. Я скопировал необходимые библиотеки DLL из * c: \ QtSDK \ Desktop \ Qt \ 4.7.4 \ mingw \ bin *, и приложение работает нормально. Как я могу узнать, какие библиотеки на самом деле использует IDE для его запуска? Если это не проблема, как я могу получить больше информации?

Редактировать: после реструктуризации кода для подключения к сигналу QNetworkAccessManager finished() я обнаружил, что reply->error() равен QNetworkReply::UnknownNetworkError. Я до сих пор не имею понятия о причине.

Решение (оно не позволит мне ответить на него, и я никак не буду ждать через 6 часов):

Хорошо, так что мне удалось решить это. Подсказка была reply-> errorString () , в которой говорилось «Ошибка создания контекста SSL ()». Это быстро заставило меня вспомнить, что URL на самом деле был URL-адресом HTTPS. Немного покопавшись, я обнаружил, что для использования функций SSL в Qt (и так по HTTPS) необходимо скопировать следующие DLL-файлы openssl в папку приложения: libeay32.dll и ssleay32 .dll . И это все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...