第一步,首先确定环境已经配置好
Qt应用程序默认没有加QtNetwork库。如下图:
在开发过程中,因处理业务需要手动添加QtNetwork库。根据常见情况分为以下两种:
【1】若使用QTCreator开发程序
在工程的pro文件中添加:QT += network(如果找不到.pro文件,如果配置了vs+qt的环境,则可以在vs打开项目之后,在项目名右键选择:Create basic .pro File)即可生成 .pro 文件。
【2】若使用VS + QT开发程序
代码如下:
头文件添加:
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <QUrl>
上传文件代码,这里以上传图片为例:
此处假设服务器端口号为:ftp://10.35.18.139
QFile ffile("C:/file.txt");//要上传的文件的本地路径
ffile.open(QIODevice::ReadOnly);
QByteArray byte_file = ffile.readAll();
QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
accessManager->setNetworkAccessible(QNetworkAccessManager::Accessible);
QUrl url("ftp://10.35.18.139/upload/file_new.txt");//上传到该服务器下的upload文件夹内
url.setPort(21);//服务器端口号,一般没有被更改过的默认端口号为21
url.setUserName("nnir_ftp");//服务器登录用户名
url.setPassword("nnirnnir");//服务器登录密码
QNetworkRequest request(url);
reply = accessManager->put(request, byte_file);
connect(accessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(loadError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(loadProgress(qint64, qint64)));
若在VS2013 + QT5编译错误提示如下:
一般出现此链接问题都是没有添加库文件造成的。
很明显,程序中使用了QtNetwork库,那么就需要手动添加QtNetwork库文件:
(1)在debug模式,需要加Q5tNetworkd.lib库文件
(2)在release模式,需要加Qt5Network.lib库文件
当使用VS进行开发时在哪里添加呢?共有两个地方需要添加(缺一不可):
(1)项目->属性->c/c++->常规->附加包含目录->在弹出的对话框中,点那个文件夹形状的按钮添加新行,输入$(QTDIR)\include\QtNetwork
具体如图所示:
(2)项目->属性->连接器->输入->附加依赖项,添加 Qt5Networkd.lib(debug模式)或者 Qt5Network.lib(release模式)
具体如图所示:
添加完成后,再编译。若仍然报错,请仔细复盘如上步骤。
备注:其他模块库的添加类比如上步骤。