Overview
This artcile will help the developer to write an Qt program which performs the action of HTTP Get and Post. These two terms are very important when an web based application needs to be developed.
This is a very basic article this can be extended to suite the developers need.
Prerequisite
Note:
-
This code snippet is developed using carbide C++ v2.4.
-
One can use Qt creator for developing this sort of application please go through this artcile for more details.
capability required
UI design (.ui file)
The below screenshot shows the ui design file.
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include
namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); protected: void changeEvent(QEvent *e); private slots: void finished(QNetworkReply *reply); void DoHttpGet(); void activateGetWidgets(); void HideWidgets(); void clearWidgets(); void activatePostWidgets(); private: Ui::MainWindow *ui;
QNetworkAccessManager *nam; }; #endif // MAINWINDOW_H
Source File
#include "mainwindow.h" #include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
ui(new Ui::MainWindow) { ui->setupUi(this);
nam = new QNetworkAccessManager(this); HideWidgets(); connect(ui->getButton,SIGNAL(clicked()),this,SLOT(activateGetWidgets())); connect(ui->submitButton,SIGNAL(clicked()),this,SLOT(DoHttpGet())); connect(ui->resetButton,SIGNAL(clicked()),this,SLOT(clearWidgets())); connect(nam,SIGNAL(finished(QNetworkReply*)),this,SLOT(finished(QNetworkReply*))); connect(ui->postButton,SIGNAL(clicked()),this,SLOT(activatePostWidgets())); }
MainWindow::~MainWindow() { delete ui; } void MainWindow::changeEvent(QEvent *e) { QMainWindow::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } } void MainWindow::activateGetWidgets() { ui->urlLabel->setHidden(false); ui->urlLine->setHidden(false); ui->submitButton->setHidden(false); ui->textBrowser->setHidden(false); ui->responseTitleLabel->setHidden(false); ui->getButton->setHidden(true); ui->postButton->setHidden(true); } void MainWindow::activatePostWidgets() { ui->dataLabel->setHidden(false); ui->dataLine->setHidden(false); activateGetWidgets(); }
void MainWindow::finished(QNetworkReply *reply) { if(reply->error() == QNetworkReply::NoError) { ui->textBrowser->setText(reply->readAll()); } else { ui->textBrowser->setText(reply->errorString()); } } void MainWindow::DoHttpGet() { ui->resetButton->setHidden(false); QString url = ui->urlLine->text(); QString data = ui->dataLine->text(); QByteArray postData; postData.append(data.toAscii()); if(postData.isEmpty() == true) { nam->get(QNetworkRequest(QUrl(url))); } else { nam->post(QNetworkRequest(QUrl(url)),postData); } } void MainWindow::HideWidgets() { ui->urlLabel->setHidden(true); ui->urlLine->setHidden(true); ui->dataLabel->setHidden(true); ui->dataLine->setHidden(true); ui->submitButton->setHidden(true); ui->responseTitleLabel->setHidden(true); ui->textBrowser->setHidden(true); ui->resetButton->setHidden(true); } void MainWindow::clearWidgets() { ui->urlLabel->setHidden(true); ui->urlLine->setHidden(true); ui->dataLabel->setHidden(true); ui->dataLine->setHidden(true); ui->submitButton->setHidden(true); ui->responseTitleLabel->setHidden(true); ui->textBrowser->setHidden(true); ui->resetButton->setHidden(true); ui->urlLine->clear(); ui->textBrowser->clear(); ui->dataLine->clear(); ui->getButton->setHidden(false); ui->postButton->setHidden(false); }
Output Screenshots
-
Initial Screen Asking the user to select and http get or post.
-
Screenshot after user has clicked the get button.
-
Screenshot after user has clicked the post button.
Sample Application
Reference Links
QNetworkAccessManager