#include "widget.h"
#include "ui_widget.h"
#include<QJsonParseError>
#include<QJsonDocument>
#include<QJsonObject>
#include<QJsonValue>
#include<QMessageBox>
#include<QDebug>
#include<QJsonArray>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowFlags(Qt::FramelessWindowHint|windowFlags());
QPalette pal(palette());
pal.setColor(QPalette::Background, QColor(50, 50, 50));
pal.setColor(QPalette::WindowText,QColor(255,255,255));
setAutoFillBackground(true);
setPalette(pal);
ui->widget->setFixedHeight(35);
ui->ICONlabel->setFixedSize(25,25);
ui->ICONlabel->setScaledContents(true);
ui->ICONlabel->setPixmap(QPixmap(":/ICON/tb.png"));
ui->BIAOTIlabel->setMinimumSize(80,25);
ui->BIAOTIlabel->setText(" 天气查询");
ui->BIAOTIlabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
ui->pushButtonmin->setFixedSize(27,25);
ui->pushButtonmax->setFixedSize(27,25);
ui->pushButtonclose->setFixedSize(27,25);
ui->lineedit->setMinimumHeight(20);
ui->pushButton->setMinimumHeight(25);
ui->lineedit->setStyleSheet("background-color:transparent;color:rgb(255,255,255);border-width:1;border-radius:10px;padding:2px 4px;border-style:outset");//border:2px groove blue;
ui->tableWidget->setHorizontalHeaderLabels(QStringList() <<tr("日期")<<tr("温度")<<tr("风力")<<tr("风向")<<tr("天气"));
//ui->tableWidget->horizontalHeader()->setHidden(true);
ui->tableWidget->verticalHeader()->setHidden(true);
ui->tableWidget->setStyleSheet("background-color:transparent;color:rgb(255,255,255)");
ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section {background-color:transparent;padding-left: 4px;border: 1px solid #6c6c6c}");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
manage = new QNetworkAccessManager(this);
connect(manage,SIGNAL(finished(QNetworkReply *)),this,SLOT(replyFinished(QNetworkReply*)));
QNetworkRequest network_request;
/*设置发送数据*/
network_request.setUrl(QUrl(QString("http://wthrcdn.etouch.cn/weather_mini?city=%1").arg(ui->lineedit->text())));
network_request.setHeader(QNetworkRequest::UserAgentHeader,"RT-Thread ART");
/*发送get网络请求*/
manage->get(network_request);
}
void Widget::replyFinished(QNetworkReply *reply)
{
/*对数据进行编码*/
QTextCodec *codec=QTextCodec::codecForName("utf8");
QString all=codec->toUnicode(reply->readAll());
init(all);
reply->deleteLater();
}
void Widget::init(QString str)//读取json数据
{
ui->tableWidget->clear();
ui->tableWidget->setColumnCount(5);
ui->tableWidget->setHorizontalHeaderLabels(QStringList() <<tr("日期")<<tr("温度")<<tr("风力")<<tr("风向")<<tr("天气"));
QByteArray byte_array;
QJsonParseError json_error;
QJsonDocument document = QJsonDocument::fromJson(byte_array.append(str),&json_error);
if(json_error.error == QJsonParseError::NoError)
{
QJsonObject obj = document.object();
QJsonValue value = obj.take("desc");//qjsonvalue生成json文档中对象的值的对象
if(value.toString() != "OK")
{
QMessageBox::warning(this,"抱歉","暂无此城市的天气情况",QMessageBox::Ok,QMessageBox::Ok);
return;
}
QJsonValue da = obj.take("data");//获取data数据对象里面的值
data.ganmao = da.toObject().take("ganmao").toString();//da.toobject()表示的是data对象里面的对象,tostring再将它转换成string类型
data.wendu = da.toObject().take("wendu").toString();
data.city = da.toObject().take("city").toString();
//QString使用%1、%2~%99的参数范围显示或储存字符串
/*举个栗子
* QString i = "10";
* QString j = "25";
* Qstring filename = "test.cpp";
* QString string = QString("Processing file %1 of %2:%3")
* .arg(i).arg(j).arg(filename);*/
QJsonValue da1 = da.toObject().take("forecast");
QJsonArray array = da1.toArray();
for(int i =0;i<5;i++)
{
QJsonValue value = array.at(i);
QJsonObject obj = value.toObject();
forecast[i].fengxiang = obj.take("fengxiang").toString();
forecast[i].date = obj.take("date").toString();
forecast[i].fengli = obj.take("fengli").toString();
forecast[i].high = obj.take("high").toString();
forecast[i].low = obj.take("low").toString();
forecast[i].type = obj.take("type").toString();
}
for(int i =0;i<5;i++)
{
ui->tableWidget->setRowCount(i+1);
for(int j=0;j<5;j++)
{
QTableWidgetItem *tab=new QTableWidgetItem;
if(j==0)
{
tab->setText(forecast[i].date);
}
if(j==1)
{
tab->setText(QString::fromLocal8Bit("%1-%2").arg(forecast[i].low.split(" ").at(1)).arg(forecast[i].high.split(" ").at(1)));
}
if(j==2)
{
QString str=forecast[i].fengli.split("[").at(2);
tab->setText(str.split("]").at(0));
}
if(j==3)
{
tab->setText(forecast[i].fengxiang);
}
if(j==4)
{
tab->setText(forecast[i].type);
}
tab->setTextAlignment(Qt::AlignVCenter);
ui->tableWidget->setItem(i,j,tab);
}
}
}
}
void Widget::on_pushButtonmin_clicked()
{
this->showMinimized();
}
void Widget::on_pushButtonmax_clicked()
{
this->isMaximized() ? this->showNormal() : this->showMaximized();
}
void Widget::on_pushButtonclose_clicked()
{
this->close();
}
void Widget::mousePressEvent(QMouseEvent *event) {
if (event->button() == Qt::LeftButton) {
dragPosition = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}
void Widget::mouseMoveEvent(QMouseEvent *event) {
if (event->buttons() & Qt::LeftButton) {
move(event->globalPos() - dragPosition);
event->accept();
}
}