安庆师范学院计算机与信息学院
Anqing teacher school College of computer and information
paramLayout->addWidget(m_methodLabel,1,0,Qt::AlignRight|Qt::AlignVCenter);
paramLayout->addWidget(m_methodCombo,1,1,Qt::AlignRight|Qt::AlignVCenter);
paramLayout->addWidget(m_startButton,2,0,1,2,Qt::AlignRight|Qt::AlignVCenter);
m_paramGroup->setLayout(paramLayout);
mainLayout->addWidget(m_paramGroup); //
m_stateGroup=newQGroupBox(tr(\),this); QVBoxLayout*stateLayout=newQVBoxLayout(); m_progress=newQProgressBar(); m_progress->setRange(0,100); m_progress->setValue(0);
stateLayout->addWidget(m_progress);
m_stateText=newQTextEdit(this); m_stateText->setReadOnly(true);
stateLayout->addWidget(m_stateText,1); m_stateGroup->setLayout(stateLayout);
mainLayout->addWidget(m_stateGroup,2); }
voidWidget::disableControls() {
m_addHttpHeaderValueButton->setDisabled(true); m_startButton->setDisabled(true); m_headerKeyEdit->setDisabled(true); m_headerValueEdit->setDisabled(true); m_urlEdit->setDisabled(true);
m_methodCombo->setDisabled(true); }
voidWidget::enableControls() {
m_addHttpHeaderValueButton->setEnabled(true); m_startButton->setEnabled(true); m_headerKeyEdit->setEnabled(true); m_headerValueEdit->setEnabled(true); m_urlEdit->setEnabled(true);
m_methodCombo->setEnabled(true);
第28页共61页
面向对象程序设计:实验报告
安庆师范学院计算机与信息学院
Anqing teacher school College of computer and information
}
QStringWidget::requestString(QNetworkRequest*req) {
QStringjoinedHeader;
QVariantvariant=req->header(QNetworkRequest::ContentTypeHeader); if(variant.isValid()) {
joinedHeader+=\; joinedHeader+=variant.toString(); joinedHeader+=\; }
variant=req->header(QNetworkRequest::UserAgentHeader); if(variant.isValid()) {
joinedHeader+=\;
joinedHeader+=variant.toString(); joinedHeader+=\; }
QList
for(inti=0;i constQByteArray&tag=headerList.at(i); value=req->rawHeader(tag); joinedHeader+=QString(\).arg(tag.data()).arg(value.data()); } returnjoinedHeader; } QStringWidget::responseString(QNetworkReply*reply) { QStringjoinedHeader; QVariantvariant=reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); if(variant.isValid()) { joinedHeader=QString(\).arg(variant.toInt()); } 第29页共61页 面向对象程序设计:实验报告 安庆师范学院计算机与信息学院 Anqing teacher school College of computer and information QList for(inti=0;i constQByteArray&tag=headerList.at(i); value=reply->rawHeader(tag); joinedHeader+=QString(\).arg(tag.data()).arg(value.data()); } returnjoinedHeader; } voidWidget::onAddHttpHeaderValue() { if(!m_request) { m_request=newQNetworkRequest(); } QStringheader=m_headerKeyEdit->text(); if(header.compare(\,Qt::CaseInsensitive)==0) { m_request->setHeader(QNetworkRequest::UserAgentHeader, m_headerValueEdit->text()); } m_request->setRawHeader(header.toLatin1() ,m_headerValueEdit->text().toLatin1()); m_stateText->setText(requestString(m_request)); } voidWidget::onStart() { disableControls(); m_stateText->clear(); m_progress->setValue(0); if(!m_request) { m_request=newQNetworkRequest(); } QStringstrURL=m_urlEdit->text(); 第30页共61页 面向对象程序设计:实验报告 安庆师范学院计算机与信息学院 Anqing teacher school College of computer and information QUrlqurl(strURL); QStringhttpMethod=m_methodCombo->currentText(); m_request->setUrl(qurl); if(httpMethod==\) { QStringerrorString; if(!openFile(true,errorString)) { QMessageBox::warning(this,tr(\) ,errorString ,QMessageBox::Ok); resetState(); return; } m_reply=m_nam.get(*m_request); } elseif(httpMethod==\) { QStringerrorString; if(!openFile(false,errorString)) { QMessageBox::warning(this,tr(\) ,errorString ,QMessageBox::Ok); resetState(); return; } m_reply=m_nam.post(*m_request,m_file); m_request->setHeader(QNetworkRequest::ContentTypeHeader, _get_content_type(m_strFilePath.toLatin1().data())); } elseif(httpMethod==\) { m_reply=m_nam.head(*m_request); } elseif(httpMethod==\) { m_reply=m_nam.deleteResource(*m_request); } else { QMessageBox::information(this,tr(\) 第31页共61页 面向对象程序设计:实验报告 安庆师范学院计算机与信息学院 Anqing teacher school College of computer and information ,tr(\) ,QMessageBox::Ok); resetState(); return; } connect(m_reply,SIGNAL(finished()),this,SLOT(onFinished())); connect(m_reply,SIGNAL(readyRead()),this,SLOT(onReadyRead())); connect(m_reply,SIGNAL(downloadProgress(qint64,qint64)), this,SLOT(onDownloadProgress(qint64,qint64))); connect(m_reply,SIGNAL(uploadProgress(qint64,qint64)), this,SLOT(onUploadProgress(qint64,qint64))); connect(m_reply,SIGNAL(metaDataChanged()),this,SLOT(onMetaDataChanged())); connect(m_reply,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(onFinished())); m_stateText->setText(requestString(m_request)); m_stateText->append(\); } voidWidget::onMethodChanged(constQString&method) { if(method==\) { //openfileforsave m_strFilePath=QFileDialog::getSaveFileName(this,tr(\)); } elseif(method==\) { //openfileforupload m_strFilePath=QFileDialog::getOpenFileName(this,tr(\)); } } voidWidget::onMetaDataChanged() { m_stateText->setText(responseString(m_reply)); } 第32页共61页 面向对象程序设计:实验报告