物联网双轴光伏追踪系统——Qt功能编写

目录

上一篇:

一、天气区

1、通过API获取天气信息 

2、解析天气

二、连接区

1、tcp服务器与客户端框图

2、IP地址的自动获取

3、tcp服务器的创建

4、tcp服务器的打开与关闭

5、tcp服务器的数据发送

6、tcp服务器的数据接收

三、操作区

1、按钮事件

2、滑动条事件 


上一篇:

物联网双轴光伏追踪系统——Qt UI布局与美化icon-default.png?t=N7T8https://blog.csdn.net/weixin_63780683/article/details/135643793?spm=1001.2014.3001.5501

一、天气区

1、通过API获取天气信息 

注:心知天气使用看我单片机实战

    //网络获取天气情况
    natManager = new QNetworkAccessManager(this);
    QNetworkRequest weatherRequest;
    weatherRequest.setUrl(QUrl("http://api.seniverse.com/v3/weather/daily.json?key=S6H95GCCwULqmbSE8&location=yantai&start=-1&days=4"));
    QNetworkReply *natReply2 = natManager->get(weatherRequest);
    connect(natReply2,SIGNAL(finished()),this,SLOT(slotGetReply2Finished()));

2、解析天气

解析天气主要是解析JSON格式的数据,解析出三天的最高温和最低温。

void Widget::slotGetReply2Finished(void)
{
    QNetworkReply *reply = (QNetworkReply *)sender();
    QTextCodec *codec = QTextCodec::codecForName("utf8");
    QString data = codec->toUnicode(reply->readAll());
//    qDebug("%s",data.toStdString().data());
    reply->deleteLater();

    QJsonParseError jsonError;
    QJsonObject     jsonObject;
    QJsonDocument   jsonDocument;
    QJsonArray      jsonArray;
    QString         jsonData;
    QString         iconPic;

    jsonDocument = QJsonDocument::fromJson(data.toUtf8(),&jsonError);
    if(!jsonDocument.isNull() && (jsonError.error == QJsonParseError::NoError))
    {
        jsonObject = jsonDocument.object();
        jsonArray = jsonObject["results"].toArray();         //results根目录
        jsonObject = jsonArray[0].toObject();
        jsonArray = jsonObject["daily"].toArray();                      //daily目录
        jsonObject = jsonArray[0].toObject();                           //今天
        jsonData = jsonObject["low"].toString()+"℃/";                        //今日低温
        jsonData = jsonData + jsonObject["high"].toString() + "℃";           //今日高温
//        qDebug("%s",jsonData.toStdString().data());
        ui->jin_wendu->setText(jsonData);
        jsonData = jsonObject["wind_speed"].toString();                       //风速
        ui->text_wendu->setText(jsonData);

        jsonObject = jsonDocument.object();
        jsonArray = jsonObject["results"].toArray();         //results根目录
        jsonObject = jsonArray[0].toObject();
        jsonArray = jsonObject["daily"].toArray();                      //daily目录
        jsonObject = jsonArray[1].toObject();                           //明天
        jsonData = jsonObject["low"].toString()+"℃/";                        //明日低温
        jsonData = jsonData + jsonObject["high"].toString() + "℃";           //明日高温
//        qDebug("%s",jsonData.toStdString().data());
        ui->ming_wendu->setText(jsonData);

        jsonObject = jsonDocument.object();
        jsonArray = jsonObject["results"].toArray();         //results根目录
        jsonObject = jsonArray[0].toObject();
        jsonArray = jsonObject["daily"].toArray();                      //daily目录
        jsonObject = jsonArray[2].toObject();                           //后天
        jsonData = jsonObject["low"].toString()+"℃/";                        //后日低温
        jsonData = jsonData + jsonObject["high"].toString() + "℃";           //后日高温
//        qDebug("%s",jsonData.toStdString().data());
        ui->hou_wendu->setText(jsonData);
    }
}

二、连接区

1、tcp服务器与客户端框图

2、IP地址的自动获取

//获取IP地址
    foreach(const QHostAddress& hostAddress,QNetworkInterface::allAddresses())//对于所有检测到的地址
        if ( hostAddress != QHostAddress::LocalHost && hostAddress.toIPv4Address() )
            ui->edit_ip->setText(hostAddress.toString());

3、tcp服务器的创建

//tcp服务器
    tcpServer = new QTcpServer(this);
    tcpSocket = new QTcpSocket(this);
    connect(tcpServer,SIGNAL(newConnection()),SLOT(newConnection_Slot()));

void Widget::newConnection_Slot()
{
    //连接客户端后socket
    tcpSocket = tcpServer->nextPendingConnection();
    //套接字的接收数据信号与数据槽函数连接
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Solt()));
}

4、tcp服务器的打开与关闭

void Widget::on_btn_connect_clicked()
{
    count += 1;
    if(count % 2 == 0)
    {
        tcpServer->listen(QHostAddress::Any,ui->edit_port->text().toUInt());
        ui->btn_connect->setIcon(QIcon(":/bi_on.png"));
    }
    else
    {
        ui->btn_connect->setIcon(QIcon(":/bi_off.png"));
        tcpSocket->close();
    }
}

5、tcp服务器的数据发送

QString str=QString::number(value);
tcpSocket->write(str.toUtf8().data());

6、tcp服务器的数据接收

//tcp读到数据
void Widget::readyRead_Solt()
{
    //读取数据
    QString buf = tcpSocket->readAll();
    qDebug("%s",buf.toStdString().data());

    int wen = buf.indexOf("wen:") + 4;
    int wen_l = buf.indexOf("shi:") - 1;
    QString wendu = buf.mid(wen,wen_l-wen);
    qDebug("%s",wendu.toStdString().data());
    ui->text_shiwen->setText(wendu);

    int shi = buf.indexOf("shi:") + 4;
    int shi_l = buf.indexOf("sun:") - 1;
    QString shidu = buf.mid(shi,shi_l-shi);
    qDebug("%s",shidu.toStdString().data());
    ui->text_shidu->setText(shidu);

    int sun = buf.indexOf("sun:") + 4;
    int sun_l = buf.indexOf(",end") - 0;
    QString sundu = buf.mid(sun,sun_l-sun);
    ui->text_sun->setText(sundu);
}

三、操作区

1、按钮事件

void Widget::on_btn_shang_pressed()
{
    QString str="u";
    tcpSocket->write(str.toUtf8().data());
}

void Widget::on_btn_xia_pressed()
{
    QString str="d";
    tcpSocket->write(str.toUtf8().data());
}

void Widget::on_btn_zuo_pressed()
{
    QString str="l";
    tcpSocket->write(str.toUtf8().data());
}

void Widget::on_btn_you_pressed()
{
    QString str="r";
    tcpSocket->write(str.toUtf8().data());
}

2、滑动条事件 

void Widget::on_slider_valueChanged(int value)
{
    QString str=QString::number(value);
    tcpSocket->write(str.toUtf8().data());
}

有需要做单片机设计或想被指导可以私聊我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琪琪猫不会嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值