QNetworkAcessManager 不能在不同的计算机上以发布模式工作

QNetworkAcessManager Not work in release mode on different computers

我有一个非常奇怪的问题 我创建了一个使用 QNetworkAcessManager 下载 HTML 页面并从此页面获取数据的应用程序 我发布了我的应用程序以便在我的第二台笔记本电脑上使用相同的无线连接但它不起作用。
在我的电脑上,在发布应用程序并使用 windeploy.exe 获取此版本 exe 的所有 dll 文件后,我尝试在我的电脑上使用它,它有 QT 并在其上开发它工作正常并获取文件中的数据.
当我在另一台计算机上使用该应用程序时,问题就来了,但是当我按下按钮获取数据时,它什么也得不到,只是空文件 所以对这个问题有任何帮助 这是我使用普通 QNetworkAcessManager 代码获取 HTML 页面数据的代码 按钮中的这段代码获取数据

manager->clearAccessCache();
manager->clearConnectionCache();
if (reply != nullptr)
    delete reply;
reply = manager->get(QNetworkRequest(QUrl("https://normalpage.html")));
connect(reply, SIGNAL(readyRead()), this, SLOT(readyRead()));
connect(reply, SIGNAL(finished()), this, SLOT(Finish()));

已读

void MainWindow::readyRead()
{
    data.append(reply->readAll());
}

finish 函数我得到类型为 QByteArray 的数据并使用它从中获取数据函数是 long
我遇到这个问题大约两个月了,但我很着急,所以我使用 libcurl 和 QProcess 来获取这个 HTML 页面数据,但我现在想知道是什么原因导致了这个问题
更新
我使用 main.cpp 中的代码获取文件中的所有 Qt 警告和错误,如 Macias 的评论中所述,并将其放入我使用的文件中附加到文件中,这样我就可以获得所有错误来了,我从 QSslSocket 收到了一些警告,如果有人可以检查这些警告,看看它是否会导致问题,因为我不知道

错误文件

    Warning: QSslSocket: cannot call unresolved function ERR_get_error ((null):0, (null))
)
))
Warning: QSslSocket: cannot call unresolved function SSLv23_client_method ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function SSL_CTX_new ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function SSL_library_init ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function ERR_get_error ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function ERR_get_error ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function SSLv23_client_method ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function SSL_CTX_new ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function SSL_library_init ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function ERR_get_error ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function ERR_get_error ((null):0, (null))

但是在工作的计算机上我收到了这个警告

Warning: QSslSocket: cannot resolve SSL_set_alpn_protos ((null):0, (null))
Warning: QSslSocket: cannot resolve SSL_CTX_set_alpn_select_cb ((null):0, (null))
Warning: QSslSocket: cannot resolve SSL_get0_alpn_selected ((null):0, (null))
Warning: QSslSocket: cannot resolve SSL_set_alpn_protos ((null):0, (null))
Warning: QSslSocket: cannot resolve SSL_CTX_set_alpn_select_cb ((null):0, (null))
Warning: QSslSocket: cannot resolve SSL_get0_alpn_selected ((null):0, (null))



更新
当我在可执行文件文件夹中添加新的 dll 文件时,它会给我这个警告

    Warning: QSslSocket: cannot call unresolved function SSLv23_client_method ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function SSL_CTX_new ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function SSL_library_init ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function ERR_get_error ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function ERR_get_error ((null):0, (null))


将回复连接到错误信号

connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(Error(QNetworkReply::NetworkError)));

插槽在这里

    void MainWindow::Error(QNetworkReply::NetworkError Myerror)
{
    qDebug() << "QNetworkReply::NetworkError = " << Myerror;
}


这是我在连接错误信号和属性后得到的

Warning: QSslSocket: cannot call unresolved function SSLv23_client_method ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function SSL_CTX_new ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function SSL_library_init ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function ERR_get_error ((null):0, (null))
Warning: QSslSocket: cannot call unresolved function ERR_get_error ((null):0, (null))
Debug: QNetworkReply::NetworkError =  QNetworkReply::NetworkError(UnknownNetworkError) ((null):0, (null))
Debug: Attribute in finish slot =  QVariant(Invalid) ((null):0, (null))


当我将这三个 dll 文件添加到我的计算机上的发布文件夹时,我在没有它们的情况下工作的应用程序出现了这个错误
当我转到 C:\AppServ\Apache24\bin 的路径并从该文件夹复制此 dll(libeay32.dll 和 ssleay32.dll)而不是我从 dll 网站下载的其他 dll终于可以用了,但是 appchace 文件夹和从网站下载的有什么区别?

提前致谢

确保您的部署文件夹中有 libeay32.dlllibssl32.dllssleay32.dll 库。如果不只是将它们复制到您的 *.exe

旁边

windeployqt 工具不包含这些库。

编辑:
您的错误可能是由于openSSL库版本不兼容造成的。 编译时使用的版本与 运行 时使用的版本不同。你可以很容易地检查出来。在 main.cpp 中创建 QApplication 之后添加这些行:

qDebug() << "SslSupport: " << QSslSocket::supportsSsl();
qDebug() << "SslLibraryBuildVersion: " << QSslSocket::sslLibraryBuildVersionString();
qDebug() << "SslLibraryRuntimeVersion: " << QSslSocket::sslLibraryVersionString();

您应该安装与构建版本最相似的版本。