#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle("遥控小车上位机");
SetStyle(":/CarControl.qss");
connect(&time_p, SIGNAL(timeout()), this, SLOT(time_update()));
time_p.start(1000);
/*1. 实例化 QNetworkAccessManager*/
manager = new QNetworkAccessManager(this);
/*2. 关联 finished 信号*/
connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));
//设置并打开数据库
if (QSqlDatabase::contains(LOG_IN_DATABASE_CONNECT_NAME))
{
database = QSqlDatabase::database(LOG_IN_DATABASE_CONNECT_NAME);
}
else
{
//数据库类型
database = QSqlDatabase::addDatabase("QSQLITE",LOG_IN_DATABASE_CONNECT_NAME);
database.setDatabaseName(LOG_IN_DATABASE_NAME); //数据库名称
database.setUserName("xl"); //用户名
database.setPassword("123456"); //密码
}
//打开数据库,如果数据库存在就打开,不存在就自动创建
if(database.open()==false)
{
Log_Text_Display("数据库打开失败.请检查程序运行路径和权限.\n");
}
else
{
Log_Text_Display("连接数据库成功.\n");
}
//数据库: 建表,如果存在就不创建,不存在就创建
QSqlQuery sql_query(database);
//下面语句查询名称为CarData 的表是否存在.
sql_query.exec(QString("select count(*) from sqlite_master where type='table' and name='%1'").arg("CarData"));
if(sql_query.next())
{
if(sql_query.value(0).toInt()==0)
{
Log_Text_Display("数据库表是不存在的.准备创建.\n");
//创建表格 创建表格语句:create table <table_name> (f1 type1, f2 type2,…);
/* CREATE TABLE 是告诉数据库系统创建一个新表的关键字。
* CREATE TABLE 语句后跟着表的唯一的名称
* 或标识*/
/*下面的语句: 创建一个名称为CarData的表,字段分别是存放 时间、温度、湿度、经度、纬度*/
QString create_sql = "create table CarData(id int primary key, time varchar(100),temperature varchar(100), humidity varchar(100),longitude varchar(100),latitude varchar(100))";
sql_query.prepare(create_sql);
if(!sql_query.exec())
{
Log_Text_Display("数据库表创建失败.\n");
}
else
{
Log_Text_Display("数据库表创建成功.\n");
}
}
else
{
Log_Text_Display("数据库表是存在的.不需要创建.\n");
}
}
//显示主页面
ui->stackedWidget->setCurrentIndex(0);
}
Widget::~Widget()
{
delete ui;
}
//设置指定样式
void Widget::SetStyle(const QString &qssFile) {
QFile file(qssFile);
if (file.open(QFile::ReadOnly)) {
QString qss = QLatin1String(file.readAll());
qApp->setStyleSheet(qss);
QString PaletteColor = qss.mid(20, 7);
qApp->setPalette(QPalette(QColor(PaletteColor)));
file.close();
}
}
/*
工程: SmartHome
日期: 2021-04-26
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 日志显示
*/
void Widget::Log_Text_Display(QString text)
{
QPlainTextEdit *plainTextEdit_log=ui->plainTextEdit_log;
//设置光标到文本末尾
plainTextEdit_log->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
//当文本数量超出一定范围就清除
if(plainTextEdit_log->toPlainText().size()>1024*4)
{
plainTextEdit_log->clear();
}
plainTextEdit_log->insertPlainText(text);
//移动滚动条到底部
QScrollBar *scrollbar = plainTextEdit_log->verticalScrollBar();
if(scrollbar)
{
scrollbar->setSliderPosition(scrollbar->maximum());
}
}
/*
工程: CarControl
日期: 2021-04-27
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 连接服务器
*/
void Widget::on_pushButton_connect_clicked()
{
if(ui->pushButton_connect->text()=="连接"){
//开始连接服务器
NewClinet();
}
else
{
if(LocalTcpClientSocket)
{
LocalTcpClientSocket->close();
}
}
}
//客户端模式:创建客户端
void Widget::NewClinet()
{
if(LocalTcpClientSocket)
{
LocalTcpClientSocket->close();
delete LocalTcpClientSocket;
LocalTcpClientSocket=nullptr;
}
/*1. 创建本地客户端TCP套接字*/
LocalTcpClientSocket = new QTcpSocket;
/*2. 设置服务器IP地址*/
QString Ipaddr=ui->lineEdit_ip->text();
QHostAddress FarServerAddr(Ipaddr);
/*3. 连接客户端的信号槽*/
connect(LocalTcpClientSocket,SIGNAL(connected()),this,SLOT(LocalTcpClientConnectedSlot()));
connect(LocalTcpClientSocket,SIGNAL(disconnected()),this,SLOT(LocalTcpClientDisconnectedSlot()));
connect(LocalTcpClientSocket,SIGNAL(readyRead()),this,SLOT(LocalTcpClientReadDtatSlot()));
/*4. 尝试连接服务器主机*/
int prot=ui->lineEdit_port->text().toInt();
LocalTcpClientSocket->connectToHost(FarServerAddr,prot);
}
//客户端模式:响应连接上服务器之后的操作
void Widget::LocalTcpClientConnectedSlot()
{
ui->pushButton_connect->setText("断开");
Log_Text_Display("成功连接服务器...\n");
}
//客户端模式:断开服务器
void Widget::LocalTcpClientDisconnectedSlot()
{
ui->pushButton_connect->setText("连接");
Log_Text_Display("与服务器断开连接...\n");
}
//客户端模式:读取服务器发过来的数据
//温湿度: #123,456,120.086199,30.139219
//分别表示: 温度、湿度、经度、纬度
void Widget::LocalTcpClientReadDtatSlot()
{
QString array=LocalTcpClientSocket->readAll();
QDateTime time = QDateTime::currentDateTime(); //获取系统现在的时间
QString time_str = time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示格式
QString text;
text +=array;
text +="\n";
Log_Text_Display(text);
//解析数据
if(array.at(0)=='#')
{
array.remove('#');
QString T_str=array.section(',',0,0); //温度
QString H_str=array.section(',',1,1); //湿度
QString jin_str=array.section(',',2,2); //经度
QString wei_str=array.section(',',3,4); //纬度
ui->label_H->setText(H_str+"%");
ui->label_Temp->setText(T_str+"℃");
ui->label_latitude->setText(wei_str);
ui->label_longitude_jin->setText(jin_str);
//保存数据到数据库
QSqlQuery sql_query(database);
//查询最大ID
QString select_max_sql = "select max(id) from CarData";
int max_id = 0;
sql_query.prepare(select_max_sql);
if(!sql_query.exec())
{
Log_Text_Display("数据库最大ID查找失败.\n");
}
else
{
while(sql_query.next())
{
max_id = sql_query.value(0).toInt();
}
Log_Text_Display(QString("data base max id:%1\n").arg(max_id));
//添加数据
//插入数据 插入语句:insert into <table_name> values (value1, value2,…);
QString insert_sql = tr("insert into CarData values(?,?,?,?,?,?)");
sql_query.prepare(insert_sql);
sql_query.addBindValue(max_id+1); //id
sql_query.addBindValue(time_str); //时间
sql_query.addBindValue(T_str); //温度
sql_query.addBindValue(H_str); //湿度
sql_query.addBindValue(jin_str); //经度
sql_query.addBindValue(wei_str); //纬度
if(!sql_query.exec(
基于QT设计的遥控小车手机APP(Android+IOS+windows).zip
版权申诉
5星 · 超过95%的资源 99 浏览量
2021-06-11
00:16:20
上传
评论 24
收藏 214KB ZIP 举报
DS小龙哥
- 粉丝: 4w+
- 资源: 520
最新资源
- 基于Vue+Echarts实现风力发电机中传感器的数据展示监控可视化系统+源代码+文档说明(高分课程设计)
- 基于单片机的风力发电机转速控制源码
- 基于C++实现的风力发电气动平衡监测系统+源代码+测量数据(高分课程设计)
- 毕业设计- 基于STM32F103C8T6 单片机,物联网技术的太阳能发电装置+源代码+文档说明+架构图+界面截图
- 基于 LSTM(长短期记忆)(即改进的循环神经网络)预测风力发电厂中风力涡轮机产生的功率+源代码+文档说明
- 基于stm32f103+空心杯电机+oled按键+运动算法
- 《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第1章docker基础(1.1-1.4)
- 基于python实现的水下压缩空气储能互补系统建模仿真与经济效益分析+源代码+论文
- 华中科技大学-自然语言处理实验,Bi-LSTM+CRF的中文分词框架,并且利用基于深度学习的方法进行中文命名实体识别++源码报告
- 基于动态罚函数的铁路车流分配与径路优化模型python源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
- 6
前往页