#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <about.h>
#include <qmessagebox.h>
#include <qpixmap.h>
#include <QTime>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//初始化定时器,连接定时函数
currentTimer = new QTimer();
currentTimer->setInterval(1000);
currentTimer->start();
connect(currentTimer, SIGNAL(timeout()), this, SLOT(setCurrentTime())); //主界面钟表实现
connect(currentTimer, SIGNAL(timeout()), this, SLOT(checkDrivingStatus()));
//初始化UDP连接
udpSocket = new QUdpSocket(this);
port = 4421;
udpSocket->bind(port, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
//连接UDP接受数据的信号和槽
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(processPendingDatagrams()));
//初始化警示标志对
signPic["1001"]="禁止超车";
signPic["1002"]="禁止掉头";
signPic["1003"]="禁止非机动车通行";
signPic["1004"]="禁止机动车通行";
signPic["1005"]="禁止鸣笛";
signPic["1006"]="禁止驶入";
signPic["1007"]="禁止通行";
signPic["1008"]="禁止右转";
signPic["1009"]="禁止直行";
signPic["1010"]="禁止左转";
signPic["1011"]="限速40";
signPic["2001"]="无人看守铁道路口";
signPic["2002"]="易滑";
signPic["2003"]="注意儿童";
signPic["2004"]="注意行人";
signPic["2005"]="注意落石";
signPic["2006"]="注意危险";
//初始化路况标志对
sStatus["1001"]="通畅";
sStatus["1002"]="平稳";
sStatus["1003"]="普通";
sStatus["1004"]="拥堵";
sStatus["1005"]="颠簸";
sStatus["1006"]="车祸";
sStatus["1007"]="沙尘";
sStatus["1008"]="断路";
sStatus["1009"]="地震";
sStatus["1010"]="海啸";
sStatus["1011"]="恐怖袭击";
sStatus["1012"]="世界末日";
}
MainWindow::~MainWindow()
{
delete ui;
}
//发送UDP包
void MainWindow::sendPackage(QString package)
{
QByteArray data;
QDataStream out(&data,QIODevice::WriteOnly);
out << package;
udpSocket->writeDatagram(data,data.length(),QHostAddress::Broadcast, port);
}
//设置当前系统时间
void MainWindow::setCurrentTime()
{
QString str;
QDate date = QDate::currentDate();
QTime time = QTime::currentTime();
str = QString("%1-%2-%3 %4").arg(date.year()).arg(date.month()).arg(date.day()).arg(time.toString());
currentTime = str;
ui->lTime->setText(currentTime);
}
//设置警示标志牌
void MainWindow::setSign(QString streetID, QString direction, QString sign)
{
if(!(streetID == ui->lesStreetID->text() && direction == ui->lesDirection->text()))
return;
QString path = ":/img/";
QString info = "";
QMap<QString,QString>::iterator it;
for(it = signPic.begin(); it != signPic.end(); it++)
{
if(it.key() == sign) {
path.append(it.value());
info.append(it.value());
path.append(".png");
ui->lesSign->setText(it.key());
break;
}
}
QPixmap pix;
pix.load(path);
ui->picSign->setPixmap(pix);
ui->picSign->show();
ui->tbSignInfo->setText(info);
}
//检查当前用户行驶状态
void MainWindow::checkDriving(QString speed, QString sign, QString sstatus)
{
ui->tbDriving->clear();
ui->tbDriving->append("当前行驶速度:"+speed+"公里/时。");
bool overSpeed = false;
if(sign == "1011" && (speed.toFloat()>40.0)) {
ui->tbDriving->append("您正在超速行驶!");
overSpeed = true;
}
else if(speed.toFloat() > 120)
ui->tbDriving->append("您是不是开得太快了?");
else
ui->tbDriving->append("正常行驶中。");
generateRecommend(overSpeed, sstatus);
}
//生成驾驶意见
void MainWindow::generateRecommend(bool overSpeed, QString sstatus)
{
ui->tbDRecommend->clear();
if(overSpeed)
ui->tbDRecommend->append("您正在超速行驶,请减速。");
if(sstatus == "1001")
ui->tbDRecommend->append("道路通畅,驾驶安全。");
else if(sstatus == "1002")
ui->tbDRecommend->append("道路平稳,驾驶安全。");
else if(sstatus == "1003")
ui->tbDRecommend->append("道路正常,请放心驾驶。");
else if(sstatus == "1004")
ui->tbDRecommend->append("道路拥堵,请耐性慢行。");
else if(sstatus == "1005")
ui->tbDRecommend->append("道路颠簸,请注意驾驶安全。");
else if(sstatus == "1006")
ui->tbDRecommend->append("附近发生道路车祸,请适当减速绕行。");
else if(sstatus == "1007")
ui->tbDRecommend->append("附近道路发生沙尘,请小心驾驶。");
else if(sstatus == "1008")
ui->tbDRecommend->append("前方公路断裂,最好掉头。");
else if(sstatus == "1009")
ui->tbDRecommend->append("附近发生地震,请做好防护。");
else if(sstatus == "1010")
ui->tbDRecommend->append("附近发生海啸,请迅速逃离。");
else if(sstatus == "1011")
ui->tbDRecommend->append("附近发生恐怖袭击,请躲好。");
else if(sstatus == "1012")
ui->tbDRecommend->append("世界末日来临,去死吧!哈哈哈哈!!!");
else
ui->tbDRecommend->append("这是一种未知的状态。。。");;
}
//检查道路拥堵情况
void MainWindow::checkJam(QString streetID, QString direction, QString speed)
{
if(!(streetID == ui->lesStreetID->text() && direction == ui->lesDirection->text()))
return;
if(speed.toFloat() < 10)
ui->tbJam->setText("当前道路十分拥堵!");
else if(speed.toFloat() < 20)
ui->tbJam->setText("当前道路比较拥堵!");
else if(speed.toFloat() < 40)
ui->tbJam->setText("当前道路开始拥堵!");
else if(speed.toFloat() < 60)
ui->tbJam->setText("当前道路通畅!");
else if(speed.toFloat() < 80)
ui->tbJam->setText("您在市内快速上!");
else if(speed.toFloat() < 100)
ui->tbJam->setText("您正在高速路上!");
else
ui->tbJam->setText("您可以在这里开飞机了!");
}
//检查撞车情况
void MainWindow::checkCrash(QString longti, QString lati, QString direction, QString speed)
{
float myLongti = ui->lesLongti->text().toFloat();
float myLati = ui->lesLati->text().toFloat();
float myDir = ui->lesDirection->text().toFloat();
float mySpeed = ui->lesSpeed->text().toFloat();
float relLongti = (longti.toFloat()>myLongti)?(longti.toFloat()-myLongti):(myLongti-longti.toFloat());
float relLati = (lati.toFloat()>myLati)?(lati.toFloat()-myLati):(myLati-lati.toFloat());
float relativeV = 0;
if((relLongti<0.01) && (relLati<0.01)) {
if(direction.toFloat() != myDir)
relativeV = speed.toFloat() + mySpeed;
else
relativeV = speed.toFloat()>mySpeed?(speed.toFloat()-mySpeed):(mySpeed-speed.toFloat());
if(relativeV <10)
ui->tbCrash->setText("附近车辆速度正常,撞车几率很小,请正常驾驶。");
else
ui->tbCrash->setText("附近有高速车辆,请注意避免撞车的发生。");
}
else
ui->tbCrash->setText("附近车辆很少,无撞车风险。");
}
//检查是否发生事故
void MainWindow::checkAccident(QString streetID, QString sstatus)
{
if(!(streetID == ui->lesStreetID->text()))
return;
QMap<QString,QString>::iterator it;
bool acci = false;
for(it = sStatus.begin(); it != sStatus.end(); it++)
{
if(it.key() == sstatus) {
ui->tbAccident->setText("附近道路状况:"+it.value()+"。");
acci = true;
ui->lesSStatus->setText(it.key());
break;
}
}
if(!acci) {
ui->tbAccident->setText("附近一切正常。");
}
}
//每秒钟
没有合适的资源?快使用搜索试试~ 我知道了~
基于Linux qt的车载移动预警系统客户端
共28个文件
png:17个
cpp:3个
ui:2个
5星 · 超过95%的资源 需积分: 10 16 下载量 82 浏览量
2013-07-26
20:22:50
上传
评论 4
收藏 52KB RAR 举报
温馨提示
在Linux下用QT开发,用到了UDP通信,Socket编程,qwt技术,MySQL数据库,分为客户端和服务器端
资源推荐
资源详情
资源评论
收起资源包目录
.rar (28个子文件)
车辆交互预警系统
mainwindow.ui 25KB
about.ui 866B
Resource.qrc 794B
车辆交互预警系统.pro.user.2.3pre1 15KB
车辆交互预警系统.pro 479B
img
禁止超车.png 2KB
限速40.png 2KB
禁止鸣笛.png 2KB
禁止非机动车通行.png 2KB
易滑.png 2KB
禁止左转.png 2KB
禁止通行.png 2KB
禁止机动车通行.png 2KB
无人看守铁道路口.png 2KB
注意落石.png 3KB
禁止驶入.png 2KB
禁止右转.png 2KB
注意行人.png 2KB
禁止直行.png 2KB
禁止掉头.png 2KB
注意儿童.png 2KB
注意危险.png 2KB
mainwindow.cpp 12KB
main.cpp 554B
车辆交互预警系统.pro.user 17KB
mainwindow.h 2KB
about.cpp 547B
about.h 293B
共 28 条
- 1
资源评论
- hhwyqwqhhwy2014-04-03编译通过,,谢谢
way_yuanfang
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功