У меня есть следующий код:
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 . И это все.