简单的车载系统界面
实现车载系统界面简单的天气查询,视频、音频播放功能。
文章目录
一、主界面
在UI中自行构建主界面,设置按钮跳转到相应的功能区。
二、天气系统
1.信号绑定获取API
代码如下(示例):
client = new QTcpSocket(this);
//连接到服务器
client->connectToHost(QHostAddress("1.81.5.176"), 80);
//可读信号绑定
connect(client, &QTcpSocket::readyRead, this, &weather::show_data);
//获取API天气情况 不同的天气情况可以改城市IP就行
QString str = QString("GET /api/weather/city/101030100 HTTP/1.1\r\nHost:t.weather.itboy.net\r\n\r\n");
client->write(str.toUtf8());
2.获取API数据
代码如下(示例):
//判断是否接受完毕 (QjSONS数据不能一次发送过来 判断接受完才切割)
bool weather::judge(const QByteArray &arr)
{
int llen = 0;
int left = 0;
while (1) {
llen = arr.indexOf('{', llen + 1);
if (llen != -1)
left++;
else
break;
qDebug() << llen;
}
int rlen = 0;
int right = 0;
while (1) {
rlen = arr.indexOf('}', rlen + 1);
if (rlen != -1)
right++;
else
break;
qDebug() << llen;
}
if (left == right)
return true;
else
return false;
}
获取完数据后处理数据并且显示到界面中。
//获取回文,并处理
void weather::show_data()
{
//读取全部信息并拷贝一份,避免误操作原始数据导致丢失
//str = client->readAll();
array += client->readAll();
if (!judge(array))
return;
//qDebug()<<array;
//去头
QByteArray sub = array.mid(array.indexOf('{'), array.lastIndexOf('}')
- array.indexOf('{') + 1);
array.clear();
QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(sub, &err);
if (err.error != QJsonParseError::NoError)
{
qDebug() << "onReadRead::doc parse is faild.";
return;
}
if (doc.object().take("status").toInt() != 200)
{
qDebug() << "获取天气信息失败";
return;
}
//构造一个QPixmap对象,使用图片路径 显示对应图片
//QPixmap pix("D:/Qt_pro/Qt_day04/3.png");
QPixmap pix("qing.png");
QPixmap pix1("yin.png");
QPixmap pix2("xiaoyu.png");//霾
QPixmap pix3("duoyun.png");
//获取地点名字
QJsonObject cityInfo = doc.object().take("cityInfo").toObject();
QString city =cityInfo.value("city").toString()+"\n";//地点名字
//city +=cityInfo.value("updateTime").toString();//时间
ui->label->setText(city);
QJsonObject data = doc.object().take("data").toObject();
QString situ = data.value("ganmao").toString();
ui->label_6->setText(situ);
QJsonObject yesterday = data.value("yesterday").toObject();
{
//昨天日期
QString str1 = yesterday.value("ymd").toString()+ "\n";
str1.remove(0,5);
str1 += yesterday.value("week").toString();
ui->yes->setText(str1);
//天气情况
QString type;
QString weather;
type += yesterday.value("type").toString();
weather = type;
qDebug()<<weather;//天气类型
type += "\n"+yesterday.value("high").toString()+ "\n";
type += yesterday.value("low").toString()+ "\n";
type += yesterday.value("fx").toString()+ "\n";
type += yesterday.value("fl").toString()+ "\n";
ui->label_5->setText(type);
//设置图片
// QPixmap pic;
int c;
if((c = QString::compare(weather, "晴" ))==0)
{
//调整QPixmap大小和lab一致
pix = pix.scaled(ui->label_4->size());
//使用lab显示图片
ui->label_4->setPixmap(pix);
}
else if((c = QString::compare(weather, "阴" ))==0)
{
pix1 = pix1.scaled(ui->label_4->size());
ui->label_4->setPixmap(pix);
}
else if((c = QString::compare(weather, "霾" ))==0)
{
pix2 = pix2.scaled(ui->label_4->size());
ui->label_4->setPixmap(pix2);
}
else if((c = QString::compare(weather, "多云" ))==0)
{
pix3 = pix3.scaled(ui->label_4->size());
ui->label_4->setPixmap(pix3);
qDebug()<<pix3;
}
}
//1-5天
QJsonArray forecast = data.value("forecast").toArray();
//今日日期1
QString str1 = forecast.at(0).toObject().value("ymd").toString()+ "\n";
str1.remove(0,5);
str1 += forecast.at(0).toObject().value("week").toString();
ui->yes1->setText(str1);
//今日温度显示
QString temp