#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
camera = nullptr;
ui->btnConnect->setDisabled(true);
win_login = new LoginWindow(this);
win_login->show();
connect(win_login,&LoginWindow::mySignal,this,&MainWindow::loginSuccess);
connect(win_login,&LoginWindow::exit_sys,this,&MainWindow::close);
win_cfg = new GateCfgWindow(this);
connect(win_cfg,&GateCfgWindow::cfg_finish,this,&MainWindow::recv_cfg_info);
server = new QTcpServer(this);
connect(server,&QTcpServer::newConnection,this,&MainWindow::resolve_conn);
QString host_name = QHostInfo::localHostName();
QHostInfo info = QHostInfo::fromName(host_name);
foreach(QHostAddress addr,info.addresses())
{
if(addr.protocol() == QAbstractSocket::IPv4Protocol)
{
//ui->lineEdit->setText(addr.toString());
server_ip = addr.toString();
break;
}
qDebug()<<addr.toString();
}
//ui->lineEdit_2->setText("5000");
server_port = 6000;
this->resize(800,600);
gate_number = 0;
DataBaseInit();
}
MainWindow::~MainWindow()
{
qDebug()<<"man window destructor";
delete ui;
//delete win_login;
delete win_cfg;
delete server;
if(camera)
{
qDebug()<<"delete camera";
delete camera;
delete viewFinder;
delete imageCapture;
}
}
void MainWindow::DataBaseInit()
{
query = new QSqlQuery(LoginWindow::database);
//创建表格
bool res;
res = query->exec("SELECT count(*) from sqlite_master where type='table' and name='car_info'");
if(!res)
{
qDebug() << "Error: Fail to select table."<< query->lastError();
return;
}
if(query->next())
{
qDebug()<<query->value(0)<<","<<query->value(1);
if(query->value(0).toInt() > 0)
{
qDebug("table car_info already exist");
return;
}
}
res = query->exec("create table car_info(id INTEGER primary key AUTOINCREMENT not null,car_id text,time_in DATETIME,time_out DATETIME,consume float,stat text)");
if(!res)
{
qDebug() << "Error: Fail to create table."<< query->lastError();
}
}
void MainWindow::start_camera()
{
//摄像头初始化
QList<QCameraInfo> list;
list = QCameraInfo::availableCameras();
for (int i = 0; i < list.size(); i++)
{
qDebug() << list.at(i).deviceName(); //获取设备名称
qDebug() << list.at(i).description();
qDebug() << list.at(i).position();
qDebug() << "###############";
}
//camera = new QCamera("@device:pnp:\\\\?\\usb#vid_0ac8&pid_301b#5&269f9a9d&0&3#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global",this);
camera = new QCamera(this);
viewFinder = new QCameraViewfinder(this);
//viewFinder->setGeometry();
//viewFinder->resize(100,100);
imageCapture = new QCameraImageCapture(camera);
//ui->verticalLayout->addWidget(viewFinder);
imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
camera->setCaptureMode(QCamera::CaptureStillImage);
camera->setViewfinder(viewFinder);
//ui->labelGate1->setScaledContents(true);
connect(imageCapture,&QCameraImageCapture::imageCaptured,this,&MainWindow::cameraImgCaptureSlot);
camera->start();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
qDebug("关闭主窗口");
int res = QMessageBox::information(this,tr("提示"),tr("真的关闭窗口吗?"),tr("Yes"),tr("No"),nullptr);
qDebug()<<"res = "<<res;
if(0 == res)
{
if(camera) camera->stop();
event->accept();
}
if(1 == res)
{
event->ignore();
}
}
void MainWindow::cameraImgCaptureSlot(int,const QImage& img)
{
if(gate_number == 1)
ui->labelGate1->setPixmap(QPixmap::fromImage(img));
if(gate_number == 2)
ui->labelGate2->setPixmap(QPixmap::fromImage(img));
qDebug("capture");
}
void MainWindow::loginSuccess()
{
// win_login->close();
win_login->hide();
//delete win_login;
this->show();
start_camera();
qDebug()<<"启动摄像头";
}
void MainWindow::onBtnGate1Config()
{
ui->btnConnect->setDisabled(true);
qDebug()<<"配置服务器网络";
win_cfg->set_ip_port(server_ip,server_port);
win_cfg->show();
}
void MainWindow::on_btnConnect_clicked()
{
qDebug()<<"与闸机建立通信";
if(ui->btnConnect->text() == "通信连接")
{
if(!server->listen(QHostAddress(server_ip),static_cast<quint16>(server_port)))
{
QMessageBox::warning(this,"警告","监听失败");
}
else
{
ui->btnConnect->setText(tr("通信断开"));
ui->btnCfg->setDisabled(true);
}
}
else
{
ui->btnConnect->setText(tr("通信连接"));
ui->btnCfg->setDisabled(false);
server->close();
}
}
void MainWindow::resolve_conn()
{
qDebug()<<"闸机连接到服务端";
client = server->nextPendingConnection();//取出一次连接。
connect(client,&QTcpSocket::readyRead,this,&MainWindow::resolve_incomming_data);
//clientlist.push_back(client);
// ui->comboBox->addItem();
}
void MainWindow::resolve_incomming_data()
{
static QByteArray array;
static QString msg;
if(client->isReadable())
{
QHostAddress addr = client->peerAddress();
QString port = QString::number(client->peerPort(),10);
QString info = QString("【") + QString("recvfrom ") + addr.toString() + QString(":")+port+QString("】:");
//ui->textEdit->append(addr.toString());
//ui->textEdit->append(",port:");
//ui->textEdit->append(QString::number(client->peerPort()));
//ui->textEdit->append(":\n");
ui->textEdit->append(info);
array = client->readAll();
//msg = QString::fromUtf8(array);
msg = QString::fromLocal8Bit(array);//转码操作
qDebug()<<msg;
QStringList list = msg.split(" ");
foreach(QString s,list)
{
qDebug()<<s;
}
if(list[0] == "1#")
{
qDebug()<<"1#闸机进车";
ui->gate_info_1->setText(list[1] + " " + QTime::currentTime().toString());
gate_number = 1;
imageCapture->capture();
bool res;
res = query->exec(QString("INSERT INTO car_info(id,car_id,time_in) VALUES(NULL,\"%1\", \"%2\")")\
.arg(list[1]).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")));
if(!res)
{
qDebug() << query->lastError();
}
}
else if(list[0] == "2#")
{
qDebug()<<"2#闸机进车";
ui->gate_info_2->setText(list[1]);
gate_number = 2;
imageCapture->capture();
bool res;
res = query->exec(QString("update car_info set time_out=\"%1\" where car_id=\"%2\"")\
.arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")).arg(list[1]));
if(!res)
{
qDebug() << query->lastError();
}
qDebug()<<"本次消费:"<<getConsum(list[1]);
}
ui->textEdit->append(msg);
}
}
float MainWindow::getConsum(const QString& carid)
{
bool res;
res = query->exec(QString("select (julianday(time_out)-julianday(time_in))*24*60 from car_info where car_id='%1'").arg(carid));
if(!res)
{
qDebug() << query->lastError();
}
if(query->next())
{
qDebug()<<query->value(0);
}
int min = query->value(0).toInt
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于Qt的智能停车场.rar (32个子文件)
login
build-login-Desktop_Qt_5_12_6_MinGW_64_bit-Debug
Makefile.Debug 93KB
ui_gatecfgwindow.h 4KB
MyDataBase.db 28KB
ui_loginwindow.h 5KB
.qmake.stash 1KB
Makefile.Release 94KB
ui_mainwindow.h 9KB
debug
login.exe 3.36MB
moc_mainwindow.cpp 5KB
moc_loginwindow.cpp 5KB
moc_mainwindow.o 496KB
moc_loginwindow.o 478KB
moc_gatecfgwindow.o 430KB
moc_predefs.h 14KB
moc_gatecfgwindow.cpp 4KB
mainwindow.o 965KB
loginwindow.o 567KB
main.o 557KB
gatecfgwindow.o 355KB
Makefile 31KB
release
login
login.pro 1KB
loginwindow.ui 3KB
loginwindow.h 689B
login.pro.user 24KB
gatecfgwindow.ui 2KB
gatecfgwindow.cpp 757B
loginwindow.cpp 4KB
main.cpp 314B
mainwindow.ui 6KB
gatecfgwindow.h 554B
mainwindow.cpp 8KB
mainwindow.h 1KB
共 32 条
- 1
资源评论
weixin_43976758
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功