QT应用编程: QNetworkReply获取百度地图静态图显示

325 阅读1分钟

一、环境介绍

操作系统: win10 64位

QT版本:  QT5.12.6

编译器:  MinGW 32

二、需求

写了一个遥控小车的上位机APP,需要根据小车上传的经纬度显示小车的定位,为了简单就直接使用百度提供的静态地图接口获取png图片进行显示。

三、百度地图接口说明

地址:  lbsyun.baidu.com/index.php?t…

 

使用接口需要先申请KEY,申请地址: lbsyun.baidu.com/apiconsole/…

四、代码

QNetworkAccessManager *manager;

/*1. 实例化 QNetworkAccessManager*/
manager = new QNetworkAccessManager(this);
/*2. 关联 finished 信号*/
connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));


/*
工程: CarControl
日期: 2021-04-28
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: QNetworkReply 返回值处理
*/
void Widget::replyFinished(QNetworkReply*network)
{
    //无错误返回
    if(network->error() == QNetworkReply::NoError)
    {
        //读取所有数据
        QByteArray byte_array=network->readAll();
        QPixmap pixmap;
        //加载图片
        if(pixmap.loadFromData(byte_array,"png",Qt::AutoColor))
        {
            QPixmap scaledPixmap = pixmap.scaled(ui->label_MapDisplay->size(), Qt::KeepAspectRatio);
            ui->label_MapDisplay->setAlignment(Qt::AlignCenter);
            ui->label_MapDisplay->setPixmap(pixmap);
        }
    }else
    {
        QMessageBox::warning(this, tr("错误信息提示"),tr("更新地图失败.\n""检查网络是否正常!"),
                             QMessageBox::Ok);
    }
    //删除 reply, 不能在 repyfinished 里直接 delete,要调用 deletelater;
    network->deleteLater();
}


/*
工程: CarControl
日期: 2021-04-28
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 更新地图显示
*/
void Widget::on_pushButton_update_map_clicked()
{
    QString url="http://api.map.baidu.com/staticimage/v2?ak=<这是你的KEY>&width=200&height=400&center=&markers=120.086199,30.139219&zoom=15&markerS";
    /*3. 提交请求*/
    manager->get(QNetworkRequest(QUrl(url)));
}