目录
上一篇:
一、天气区
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());
}
有需要做单片机设计或想被指导可以私聊我