寫個FTP程序運行后提示:
代碼如下:
// 上傳文件
void FtpManager::put(const QString &fileName, const QString &path)
{
QFile file(fileName);
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();
m_pUrl.setPath(path);
qDebug()<<"path:"<<path;
QNetworkReply *pReply = m_manager.put((QNetworkRequest)m_pUrl, data);
qDebug()<<"url :"<<m_pUrl;
//connect(pReply, SIGNAL(uploadProgress(qint64, qint64)), this, SIGNAL(uploadProgress(qint64, qint64)));
connect(pReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SIGNAL(error(QNetworkReply::NetworkError)));
connect(pReply,SIGNAL(finished()),this,SLOT(finished()));
connect(pReply,SIGNAL(bytesWritten(qint64)),this,SLOT(onDataWrite(qint64)));
}
應該是這”句代碼“QNetworkReply *pReply = m_manager.put((QNetworkRequest)m_pUrl, data);“引起的
搜索發現:帖子:
今天研讀QQStars(http://www.qtcn.org/bbs/read.php?tid-57944.html)時,發現這個軟件登陸不上,總是提示:
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function TLSv1_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
上網搜了半天,都說要在電腦那里安裝openssl,然后把C:\OpenSSL-Win64\bin下的libeay32.dll和ssleay32.dll拷貝到D:\Qt\Qt5.4.2\5.4\mingw491_32\bin,然后編譯就能用。
然而並沒什么卵用!
無奈之下,我只好用QtCreator3.30進入調試模式,一步步看,看是哪里出了問題。然后讓我開心的事情出現了,按登陸的時候並沒有出現上面那些錯誤提示!也就是說,在調試模式下,Qt是加載得了libeay32.dll和ssleay32.dll的。那它加載的是不是和我提供的不一樣呢?
把調試日志調出來看了一下,發現了Qt加載的這兩個庫,是Qt自帶的!路徑是:D:\Qt\Qt5.4.2\Tools\mingw491_32\opt\bin。
最后,我把這個目錄下的兩個dll拷貝到D:\Qt\Qt5.4.2\5.4\mingw491_32\bin,再運行就沒有報錯了!
弄了半天,原來是版本不對,Qt用的openssl版本和我上官網下的不一樣,如果我把所有版本嘗試了,估計也會成功。不過能夠通過這樣快捷的方法解決問題,實屬良方,以后也要多多用調試器來解決問題。