QT网络编程——http通信

http通信

  • 效果图
  • .pro文件
  • .h文件
  • .cpp
    • 1.点击按钮发送请求
    • 2.关联信号
    • 3.read_data槽函数

效果图

QT网络编程——http通信_第1张图片
在文本输入框中输入图片地址(注意前面必须是http),点击发送请求,即可显示图片,如果是https就无法解码。(如果原先的图片的链接开头是https,那么直接把s去掉即可)

.pro文件

QT       += core gui network

.h文件

private slots:
    void on_SF_BT_clicked();


    //读取信息
    void read_data(QNetworkReply *app);


private:
    Ui::MainWindow *ui;


    //声明一个管理对象
    QNetworkAccessManager manager;

http通信是客户端与网页等已经建好的服务器通信,所以我们只需要建立客户端就行了。

全局变量中,创建一个管理对象manager

.cpp

1.点击按钮发送请求

// 发送请求
void MainWindow::on_SF_BT_clicked()
{
    //ui->lineEdit->text();//获取到单行输入框的内容
    // QUrl 将输入的字符串解析成http地址
    QUrl url(ui->lineEdit->text());
    //创建一个请求对象
    QNetworkRequest request(url);
     //发送请求
    manager.get(request);
}

根据输入的url,创建一个请求的对象,让manager去获取这个请求对象
url(ui->lineEdit->text());把字符串编码成服务器能识别的内容。

2.关联信号

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //关联请求完毕,会发出一个信号 finished
    connect(&manager,&QNetworkAccessManager::finished,this,&MainWindow::read_data);
}

当服务器收到请求后,会返回一个报文
当manager获取到请求对象时,发出finished信号,触发该窗口this,去执行rea_data这个槽函数。

3.read_data槽函数

//读取数据
void MainWindow::read_data(QNetworkReply *app)
{
    QByteArray array = app->readAll();

    //创建图片空间
    QPixmap mmp;
    mmp.loadFromData(array);


    //设置图片显示的大小,让图片符合label显示框的大小
    mmp = mmp.scaled(ui->label->size());
    
    //在label中显示图片
    ui->label->setPixmap(mmp);
}

用QNetworkReply *app去得到返回的报文内容

manage获得到的内容,从槽函数的参数中传进来,用一个数组去接住,
然后以图片的形式显示出来就行了。

你可能感兴趣的:(QT)