QNetworkAccessManager定义对象报错,说构造函数无法解析

goodluck365168 2017-06-01 04:57:58
代码如下
#include <QDialog>
#include <QtNetwork/QNetworkAccessManager>
#include <QFile>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>
#include <QPushButton>
#include <QHBoxLayout>
#include <QIODevice>

class Dialog : public QDialog
{
public:
Dialog(QWidget *parent = 0);
protected slots:
void httpDownload();
void replyFinished(QNetworkReply*reply);
void onUploadProgress(qint64 bytesSent,qint64 butesTotal);

private:
QPushButton *download_Btn;
QFile *file;
QNetworkAccessManager *accessManager;
QNetworkRequest request;
QNetworkReply *reply;
QHBoxLayout *layout;
};

#endif // DIALOG_H





#include "dialog.h"
#include<QtDebug>
Dialog::Dialog(QWidget *parent): QDialog(parent)
{
download_Btn=new QPushButton("download");
layout=new QHBoxLayout();
layout->addWidget(download_Btn);
layout->sizeHint().height();
setLayout(layout);
connect(download_Btn,SIGNAL(clicked()),this,SLOT(httpDownload()));
}
void Dialog::httpDownload(){
//QUrl url("http://localhost:8080/uploadtest/MyUpload");
QUrl url("http://www.baidu.com");
QByteArray post_data;//上传的数据可以是QByteArray或者file类型
post_data.append("hello");
file=new QFile("/home/vino/Desktop/a.txt");
file->open(QIODevice::ReadOnly);//只读方式打开文件
accessManager=new QNetworkAccessManager(this);

request.setUrl(url);
/******************设置http的header***********************/
// request.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data");
// request.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream");//上传文件
// request.setRawHeader("Content-Disposition","form-data;name='doc';filename='a.txt'");
//request.setHeader(QNetworkRequest::ContentLengthHeader,post_data.length());


connect(accessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));//finish为manager自带的信号,replyFinished是自定义的
reply=accessManager->post(request,post_data);//通过发送数据,返回值保存在reply指针里.

//connect(reply, SIGNAL(uploadProgress ( qint64 ,qint64 )), this, SLOT( onUploadProgress(qint64 ,qint64 ));//上传文件时进度

//void QNetworkReply::downloadProgress ( qint64 bytesReceived, qint64 bytesTotal ) qt也有提供下载文件的进度
}

void Dialog::replyFinished(QNetworkReply *reply){
//获取响应的信息,状态码为200表示正常
QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);

//无错误返回
if(reply->error() == QNetworkReply::NoError)
{
download_Btn->setText("success");
QByteArray bytes = reply->readAll();
QString result(bytes); //转化为字符串
qDebug()<<result;
}
else
{
//处理错误
download_Btn->setText("failed");
}

reply->deleteLater();//要删除reply,但是不能在repyfinished里直接delete,要调用deletelater;

}

void Dialog::onUploadProgress(qint64 bytesSent, qint64 butesTotal){
}



帮看下
...全文
259 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningto.com 2017-06-02
  • 打赏
  • 举报
回复
楼上应该是正确答案,另外new QFile 和new QNetworkAccessManager最好放在构造函数里面,否则每次点击按钮都new一次有内存泄漏
astro_lee 2017-06-02
  • 打赏
  • 举报
回复
你的pro里面QT += network有没有?如果有,右键项目run qmake然后build再试试看
goodluck365168 2017-06-01
  • 打赏
  • 举报
回复

16,241

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧