可以查询天气的日历——QT制作第一个自己的小软件
目录
前言
一、ui界面
1、整体效果
2、主界面
3、天气查询
4、编辑日志
二、程序所有的文件
声明软件图标
1、widget.cpp
2、weather.cpp
3、text.cpp
4、main.cpp
5、widget.h
6、weather.h
7、text.h
前言
这是一款基于QT制作的日历软件具有日期查询,日期播报,天气查询,日志安排等功能。
一、ui界面
1、整体效果
2、主界面
1、利用ui将自己需要的控键拖出来并合理布局,需要有功能的按键就转到槽函数编写功能代码(图片资源需要自己找素材)
2、点击更新天气以后会更新出当前城市的天气情况(默认为成都),天气情况会由动态的一组图片展示
3、双击空白处会播报当前日期
3、天气查询
1、点击主界面中的天气查询按钮会弹出此窗口
在城市一栏输入你想查找的城市点击查询即可显示出具体的天气信息,(详细信息也会显示到文本浏览框中——但是文本是josn格式有需要可以解析出来)
4、编辑日志
点击添加日志按钮弹出此对话框,键入日志安排点击确定关闭窗口日志将显示到主界面
二、程序所有的文件
声明软件图标
RC_ICONS = ./rili.ico
1、widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);on_lcdNumber_overflow();//显示当前时间QTimer *pTimer=new QTimer();connect(pTimer,SIGNAL(timeout()),this,SLOT(on_lcdNumber_overflow()));pTimer->start(500);QDateTime date = QDateTime::currentDateTime();ui->label_8->setText(date.toString("yyyy年MM月dd日 ddd"));QMovie *m = new QMovie(":/img/3.gif");//TODOui->label_6->setMovie(m);m->start();http_acc = new QNetworkAccessManager;connect(http_acc, SIGNAL(finished(QNetworkReply*)), this, SLOT(new_weather(QNetworkReply*)));//界面优化ui->pushButton->setStyleSheet(//正常状态样式"QPushButton{""background-color:rgb(8,189,253);"//设置按钮背景色"border-radius:3px;"//设置圆角半径"}""QPushButton:hover{""background-color:#999999;"//设置按钮点击时的背景颜色"}");
}Widget::~Widget()
{delete ui;
}void Widget::on_lcdNumber_overflow()
{QDateTime date_t=QDateTime::currentDateTime();this->ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat);this->ui->lcdNumber->setStyleSheet("color:black;");this->ui->lcdNumber->display(date_t.toString("HH:mm:ss"));
}
void Widget::on_pushButton_clicked()//天气查询
{weather *weatherAsk = new weather;weatherAsk->show();
}void Widget::on_pushButton_2_clicked()//添加日志
{text_window = new text;connect(text_window,SIGNAL(successed(QString)),this,SLOT(receiveData(QString)));text_window->show();
}void Widget::on_pushButton_3_clicked()//删除日志
{ui->textBrowser->clear();
}
//void Widget::on_pushButton_4_clicked()
//{}
void Widget::on_pushButton_4_clicked()//更新天气
{QNetworkRequest request;request.setUrl(QString("http://autodev.openspeech.cn/csp/api/v2.1/weather?openId=aiuicus&clientType=android&sign=android&city=成都&latitude=39.902895&longitude=116.427915&needMoreData=true&pageNo=1&pageSize=1"));http_acc->get(request);
}
void Widget::new_weather(QNetworkReply *r)
{QString all = r->readAll();QJsonParseError err;QJsonDocument json_recv = QJsonDocument::fromJson(all.toUtf8(),&err);//qDebug() << err.error;if(!json_recv.isNull()){//qDebug()<<"finish!!";QJsonObject object = json_recv.object();if(object.contains("data")){QJsonValue value = object.value("data"); // 获取指定 key 对应的 value//qDebug()<<value;if(value.isObject()){QJsonObject object_data = value.toObject();//qDebug()<<object_data;if(object_data.contains("list")){QJsonArray Array = object_data.take("list").toArray();//qDebug()<<Array;for(int i=0;i<Array.size();i++){QJsonObject Obj = Array.at(i).toObject();if(Obj.contains("city")){QString city = Obj.value("city").toString();ui->label_5->setText(city);//qDebug()<<city;}if(Obj.contains("weather")){QString weather = Obj.value("weather").toString();ui->label_9->setText(weather);if(weather.contains("多云"))//动态的显示天气情况{QMovie *m = new QMovie(":/img/duoyun.gif");//TODOui->label_6->setMovie(m);m->start();}if(weather.contains("大雨")){QMovie *m = new QMovie(":/img/dayu.gif");//TODOui->label_6->setMovie(m);m->start();}if(weather.contains("晴")){QMovie *m = new QMovie(":/img/qing.gif");//TODOui->label_6->setMovie(m);m->start();}if(weather.contains("小雨")){QMovie *m = new QMovie(":/img/xiaoyu.gif");//TODOui->label_6->setMovie(m);m->start();}if(weather.contains("阴天")){QMovie *m = new QMovie(":/img/yintian.gif");//TODOui->label_6->setMovie(m);m->start();}if(weather.contains("雷阵雨")){QMovie *m = new QMovie(":/img/1.gif");//TODOui->label_6->setMovie(m);m->start();}//qDebug()<<weather;}if(Obj.contains("low")){double low = Obj.value("low").toDouble();QString str = QString::number(low,'f',0);ui->label_7->setText(str);//qDebug()<<low;}if(Obj.contains("high")){double high = Obj.value("high").toDouble();QString str1 = QString::number(high,'f',0);QString str2 = ui->label_7->text();ui->label_7->setText(str2+'~'+str1);//qDebug()<<high;}}}}}}else{qDebug()<<"json_recv is NULL or is not a object !!";}r->deleteLater();
}
void Widget::mouseDoubleClickEvent(QMouseEvent *event)//鼠标双击事件
{pos = event->globalPos();//qDebug()<<"111111111";QTextToSpeech *s = new QTextToSpeech;s->say("今天是"+ui->label_8->text());}
void Widget::receiveData(QString buf1)//接受日志信息的槽函数
{//qDebug()<<buf1;ui->textBrowser->setText(buf1);
}//void Widget::on_calendarWidget_clicked(const QDate &date)
//{//}
2、weather.cpp
#include "weather.h"
#include "ui_weather.h"weather::weather(QWidget *parent) :QWidget(parent),ui(new Ui::weather)
{ui->setupUi(this);http_acc = new QNetworkAccessManager;connect(http_acc, SIGNAL(finished(QNetworkReply*)), this, SLOT(recv_ack(QNetworkReply*)));
}weather::~weather()
{delete ui;
}
void weather::recv_ack(QNetworkReply *r)//天气查询
{//QByteArray buf = r->readAll();//不能两次重复接收//qDebug() << buf.toStdString().c_str();//ui->textBrowser->setText(buf.toStdString().c_str());//qDebug()<<"finish!!";QString all = r->readAll();ui->textBrowser->setText(all);QJsonParseError err;QJsonDocument json_recv = QJsonDocument::fromJson(all.toUtf8(),&err);//qDebug() << err.error;if(!json_recv.isNull()){//qDebug()<<"finish!!";QJsonObject object = json_recv.object();if(object.contains("data")){QJsonValue value = object.value("data"); // 获取指定 key 对应的 value//qDebug()<<value;if(value.isObject()){QJsonObject object_data = value.toObject();//qDebug()<<object_data;if(object_data.contains("list")){QJsonArray Array = object_data.take("list").toArray();//qDebug()<<Array;for(int i=0;i<Array.size();i++){QJsonObject Obj = Array.at(i).toObject();if(Obj.contains("city")){//QString city = Obj.value("city").toString();//qDebug()<<city;}if(Obj.contains("weather")){QString weather = Obj.value("weather").toString();ui->label_11->setText(weather);if(weather.contains("大雨"))//动态的显示天气情况{QMovie *m = new QMovie(":/img/dayu.gif");//TODOui->label_5->setMovie(m);m->start();}if(weather.contains("多云")){QMovie *m = new QMovie(":/img/duoyun.gif");//TODOui->label_5->setMovie(m);m->start();}if(weather.contains("晴")){QMovie *m = new QMovie(":/img/qing.gif");//TODOui->label_5->setMovie(m);m->start();}if(weather.contains("小雨")){QMovie *m = new QMovie(":/img/xiaoyu.gif");//TODOui->label_5->setMovie(m);m->start();}if(weather.contains("阴天")){QMovie *m = new QMovie(":/img/yintian.gif");//TODOui->label_5->setMovie(m);m->start();}if(weather.contains("雷阵雨")){QMovie *m = new QMovie(":/img/1.gif");//TODOui->label_5->setMovie(m);m->start();}//qDebug()<<weather;}if(Obj.contains("wind")){QString wind = Obj.value("wind").toString();ui->label_10->setText(wind);//qDebug()<<wind;}if(Obj.contains("low")){double low = Obj.value("low").toDouble();ui->label_7->setNum(low);//qDebug()<<low;}if(Obj.contains("high")){double high = Obj.value("high").toDouble();ui->label_3->setNum(high);qDebug()<<high;}}}}}}else{qDebug()<<"json_recv is NULL or is not a object !!";}r->deleteLater();}
void weather::on_pushButton_clicked()//链接墨迹天气的API接口
{//发送一个http请求QNetworkRequest request;request.setUrl(QString("http://autodev.openspeech.cn/csp/api/v2.1/weather?openId=aiuicus&clientType=android&sign=android&city=%0&latitude=39.902895&longitude=116.427915&needMoreData=true&pageNo=1&pageSize=1").arg(ui->lineEdit->text()));http_acc->get(request);
}
3、text.cpp
#include "text.h"
#include "ui_text.h"
#include <QDebug>
text::text(QWidget *parent) :QWidget(parent),ui(new Ui::text)
{ui->setupUi(this);//me =new Widget;
}text::~text()
{delete ui;
}void text::on_pushButton_clicked()//创建文件存储日志
{buf = ui->textEdit->toPlainText();//connect(this,SIGNAL(successed(QString)),this->me,SLOT(receiveData(QString)));emit successed(buf);//qDebug()<<buf;//this->close();QByteArray array=ui->textEdit->toPlainText().toUtf8();QFile file("try.txt");file.open(QIODevice::WriteOnly | QIODevice::Text);file.write(array);file.close();this->hide();
}
4、main.cpp
#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
5、widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTimer>
#include <QDateTime>
#include <QMouseEvent>
#include <QTextToSpeech>
#include <QMovie>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include "weather.h"
#include "text.h"
namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECT
private slots:void on_pushButton_clicked();void on_lcdNumber_overflow();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();void receiveData(QString);//接受日志信息void new_weather(QNetworkReply*);//更新天气//void on_calendarWidget_clicked(const QDate &date);public:explicit Widget(QWidget *parent = 0);~Widget();void mouseDoubleClickEvent(QMouseEvent *event); //鼠标双击事件private:Ui::Widget *ui;QPoint pos;//鼠标位置weather *weather_window;text *text_window;QNetworkAccessManager *http_acc;
};#endif // WIDGET_H
6、weather.h
#ifndef WEATHER_H
#define WEATHER_H#include <QWidget>
#include <QNetworkAccessManager>
#include <QNetworkReply>#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonParseError>
#include <QJsonArray>
#include <QJsonValue>#include <QNetworkRequest>
#include <QDebug>
#include <QMovie>
namespace Ui {
class weather;
}class weather : public QWidget
{Q_OBJECTpublic slots:void recv_ack(QNetworkReply*);
public:explicit weather(QWidget *parent = 0);~weather();private slots:void on_pushButton_clicked();private:Ui::weather *ui;QNetworkAccessManager *http_acc;
};#endif // WEATHER_H
7、text.h
#ifndef TEXT_H
#define TEXT_H#include <QWidget>
#include <QFile>
namespace Ui {
class text;
}class text : public QWidget
{Q_OBJECT
signals:void successed(QString);
public:explicit text(QWidget *parent = 0);~text();private slots:void on_pushButton_clicked();private:Ui::text *ui;QString buf;
};#endif // TEXT_H
可以查询天气的日历——QT制作第一个自己的小软件相关推荐
- 【小程序制作经验分享】怎么在五分钟内做出查询天气快递/星座运势/天天鸡汤等的小程序?(不是用模板)
✨API是什么? 应用程序接口(英语:Application Programming Interface,缩写API),是软件系统不同组成部分衔接的约定. 为了实现更多的功能,Zion 为用户提供了& ...
- 制作ico图标的一个小软件
最近在写软件的过程中,遇见了如下问题: 1.libpng warning:iCCP:known incorrect sRGB profile 在网上搜索解决方案为:将图片用QIMAGE读取再重新保存就 ...
- 使用python中的tkinter模块制作一个学习打卡小软件
学习任务打卡小软件---戈多Sensei 1.制定任务 2.完成任务 3.学习评估 最近为了给我的星星⭐写一个学习记录软件,学习了一下python中的tkinter模块,做了一个可视化打卡界面,此处为 ...
- 《java-----我的第一款像样的小软件》---运用了jsoup,jmail,多线程,文件的io操作等等
运用了jsoup,jmail,多线程,文件的io操作等等多项技术,经历了12*5多个小时终于完成了. 部分代码: package com.ytu.view;import java.awt.Border ...
- 用html和css制作日历,CSS3制作日历
前面使用了CSS3制作过Progress Bars.分页导航.Login栏.Search Box等等.今天一起和大家使用css3来制作一个日历效果,希望大家喜欢. 目标 今天我们的目标是制作如下面DE ...
- Qt制作一个相册浏览工具
如何用Qt制作一个相册浏览的小程序? 程序开发思路如下: 1.支持多张相片浏览,可翻页浏览,相片可从本地导入; 2.相片要有放大和缩小的功能; 3.相片可自动浏览,时间间隔可自定义. 主要的代码如下: ...
- 基于QT制作的天气指数人机交互界面
闲来无事,打算做一个人机交互界面,用来查看各地区的天气指数. https://github.com/zhengzebin525/LINUX-Environmental-programming/tree ...
- web网络和http协议(了解域名和网页,制作第一个网页,了解http协议,流程和请求报文格式)
文章目录 web网络和http协议 了解域名 早期使用HOST文件解析域名 现在DNS(Domain Name system 域名系统) 域名的概述 域名空间结构 域名介绍 域名注册 域名注册步骤 网 ...
- php如果实现日历的制作,教大家制作简单的php日历
最近的一个项目中,需要将数据用日历方式显示,网上有很多的JS插件,后面为了自己能有更大的控制权,决定自己制作一个日历显示.如下图所示: 一.计算数据 1.new一个Calendar类 2.初始化两个下 ...
最新文章
- 自动配置IPv4问题
- bind日志配置详解
- 关于cocos2d-x 和安卓之间的相互调用
- C++ Set常用用法
- 全站仪数据导入电脑_三鼎762R系列全站仪的SD卡传输教程
- 杨辉三角形递归c语言,关于【杨辉三角】的递归解决方法,请教。有没有大神【【高手】】...
- XAML实例教程系列 - 资源(Resources)
- [html] history和hash两种路由方式的最大区别是什么?
- 2017.7.27 排列perm 思考记录
- POJ 2777 ZOJ 1610 HDU 1698 --线段树--区间更新
- [POJ2406]字符串的幂
- J2EE框架技术(SpringMVC) 知识点笔记(1)
- Transformations in signals and systems DSP
- 【专家级前端JavaScript面试题】快来尝试一下
- 哥本哈根大学计算机科学,2020年哥本哈根大学有哪些优势专业
- 旅游评论情感分析(2)---前期调查总结
- G-Transformer for Document-level Machine Translation
- 获取用户参数_SAP刘梦_新浪博客
- [普及练习场] 生活大爆炸版石头剪刀布
- 【Linux】Linux文件与文件的存储