349 lines
9.1 KiB
C++
349 lines
9.1 KiB
C++
|
|
#include "mainwindow.h"
|
|||
|
|
#include "ui_mainwindow.h"
|
|||
|
|
|
|||
|
|
#include <QFile>
|
|||
|
|
#include <QMessageBox>
|
|||
|
|
#include <QFileDialog>
|
|||
|
|
#include <QString>
|
|||
|
|
#include <QDebug>
|
|||
|
|
|
|||
|
|
#include "commonhelper.h"
|
|||
|
|
#include "frameless_helper.h"
|
|||
|
|
|
|||
|
|
#include <mmsystem.h>
|
|||
|
|
#pragma comment(lib, "winmm")
|
|||
|
|
|
|||
|
|
#define MaxSize_IRSensorTool (4096*2048)
|
|||
|
|
|
|||
|
|
MainWindow::MainWindow(QWidget *parent) :
|
|||
|
|
QMainWindow(parent),
|
|||
|
|
ui(new Ui::MainWindow)
|
|||
|
|
{
|
|||
|
|
ui->setupUi(this);
|
|||
|
|
|
|||
|
|
this->setWindowTitle(tr(" ") );
|
|||
|
|
|
|||
|
|
// OpenGLView
|
|||
|
|
//this->setAttribute(Qt::WA_Mapped);
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
m_bMousePressed = false;
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
m_bThreadRunning_CaptureDeviceData = false;
|
|||
|
|
m_ptrThread_CaptureDeviceData = nullptr;
|
|||
|
|
|
|||
|
|
// 初始化界面
|
|||
|
|
InitStyle();
|
|||
|
|
|
|||
|
|
// 加载信号槽函数连接
|
|||
|
|
Connect();
|
|||
|
|
|
|||
|
|
m_pGdSQLite3 = new GdSQLite3();
|
|||
|
|
m_pGdSQLite3->OpenDB("MyTestDB.db");
|
|||
|
|
|
|||
|
|
m_nInsertIndex = 11;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
MainWindow::~MainWindow()
|
|||
|
|
{
|
|||
|
|
//
|
|||
|
|
Disconnect();
|
|||
|
|
|
|||
|
|
if(nullptr != m_pGdSQLite3)
|
|||
|
|
{
|
|||
|
|
m_pGdSQLite3->CloseDB();
|
|||
|
|
|
|||
|
|
delete m_pGdSQLite3;
|
|||
|
|
m_pGdSQLite3 = nullptr;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
delete ui;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MainWindow::Connect()
|
|||
|
|
{
|
|||
|
|
// 通用
|
|||
|
|
connect(ui->m_pushButton_MinMenu, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
connect(ui->m_pushButton_CloseMenu, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
|
|||
|
|
// 数据库测试
|
|||
|
|
connect(ui->m_pushButton_DB_Init, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
connect(ui->m_pushButton_DB_Insert, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
connect(ui->m_pushButton_DB_Delete, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
connect(ui->m_pushButton_DB_Update, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
connect(ui->m_pushButton_DB_Query, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
connect(ui->m_pushButton_DB_Query_RecordSet, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
connect(&m_varTimer, &QTimer::timeout, this, &MainWindow::OnTimer);
|
|||
|
|
m_varTimer.setTimerType(Qt::PreciseTimer);
|
|||
|
|
m_varTimer.start(40);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MainWindow::Disconnect()
|
|||
|
|
{
|
|||
|
|
// 通用
|
|||
|
|
disconnect(ui->m_pushButton_MinMenu, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
disconnect(ui->m_pushButton_CloseMenu, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
|
|||
|
|
// 数据库测试
|
|||
|
|
disconnect(ui->m_pushButton_DB_Init, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
disconnect(ui->m_pushButton_DB_Insert, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
disconnect(ui->m_pushButton_DB_Delete, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
disconnect(ui->m_pushButton_DB_Update, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
disconnect(ui->m_pushButton_DB_Query, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);\
|
|||
|
|
disconnect(ui->m_pushButton_DB_Query_RecordSet, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
m_varTimer.stop();
|
|||
|
|
disconnect(&m_varTimer, &QTimer::timeout, this, &MainWindow::OnTimer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MainWindow::OnButtonClicked()
|
|||
|
|
{
|
|||
|
|
// 最小化
|
|||
|
|
if(sender() == ui->m_pushButton_MinMenu)
|
|||
|
|
{
|
|||
|
|
this->showMinimized();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 退出程序
|
|||
|
|
if(sender() == ui->m_pushButton_CloseMenu)
|
|||
|
|
{
|
|||
|
|
qApp->exit();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(sender() == ui->m_pushButton_DB_Init)
|
|||
|
|
{
|
|||
|
|
//
|
|||
|
|
QString strSQL = "";
|
|||
|
|
|
|||
|
|
// 删除表
|
|||
|
|
strSQL = "drop table if exists TestTable;";
|
|||
|
|
m_pGdSQLite3->Execute(strSQL);
|
|||
|
|
|
|||
|
|
// 创建表
|
|||
|
|
strSQL = "create table TestTable(ID integer, msg text);";
|
|||
|
|
m_pGdSQLite3->Execute(strSQL);
|
|||
|
|
|
|||
|
|
// 初始化数据
|
|||
|
|
for(int i = 0; i < 10; i++)
|
|||
|
|
{
|
|||
|
|
strSQL = QString("insert into TestTable(ID, msg) values (%1,\"msg %2\");")
|
|||
|
|
.arg(i+1)
|
|||
|
|
.arg(i+1);
|
|||
|
|
m_pGdSQLite3->Execute(strSQL);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_nInsertIndex = 11;
|
|||
|
|
|
|||
|
|
int jj = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(sender() == ui->m_pushButton_DB_Insert)
|
|||
|
|
{
|
|||
|
|
//
|
|||
|
|
QString strSQL = QString("insert into TestTable(ID, msg) values (%1,\"msg%2\");")
|
|||
|
|
.arg(m_nInsertIndex)
|
|||
|
|
.arg(m_nInsertIndex);
|
|||
|
|
m_pGdSQLite3->Execute(strSQL);
|
|||
|
|
|
|||
|
|
m_nInsertIndex++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(sender() == ui->m_pushButton_DB_Delete)
|
|||
|
|
{
|
|||
|
|
//
|
|||
|
|
uint32_t nID = ui->m_lineEdit_ID_Delete->text().toUInt();
|
|||
|
|
|
|||
|
|
QString strSQL = QString("delete from TestTable where ID=%1;")
|
|||
|
|
.arg(nID);
|
|||
|
|
m_pGdSQLite3->Execute(strSQL);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(sender() == ui->m_pushButton_DB_Update)
|
|||
|
|
{
|
|||
|
|
//
|
|||
|
|
uint32_t nID = ui->m_lineEdit_ID_Update->text().toUInt();
|
|||
|
|
QString strMsg = ui->m_lineEdit_Msg_Update->text();
|
|||
|
|
|
|||
|
|
QString strSQL = QString("update TestTable set msg=\"%1\" where ID=%2;")
|
|||
|
|
.arg(strMsg)
|
|||
|
|
.arg(nID);
|
|||
|
|
m_pGdSQLite3->Execute(strSQL);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(sender() == ui->m_pushButton_DB_Query)
|
|||
|
|
{
|
|||
|
|
//
|
|||
|
|
QString strResult = "";
|
|||
|
|
|
|||
|
|
m_pGdSQLite3->QueryAllTableInfo(strResult, "TestTable");
|
|||
|
|
|
|||
|
|
ui->m_textEdit_Result->setText(strResult);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(sender() == ui->m_pushButton_DB_Query_RecordSet)
|
|||
|
|
{
|
|||
|
|
GdSQLite3RecordSet rs(m_pGdSQLite3);
|
|||
|
|
//
|
|||
|
|
QString strSQL = "select * from TestTable;";
|
|||
|
|
QString strResult = "";
|
|||
|
|
|
|||
|
|
rs.Open(strSQL);
|
|||
|
|
|
|||
|
|
while(rs.Next() )
|
|||
|
|
{
|
|||
|
|
QVariant varVal;
|
|||
|
|
|
|||
|
|
strResult += "ID: ";
|
|||
|
|
|
|||
|
|
// ID
|
|||
|
|
rs.GetValue(varVal, 0, GdSQLite3RecordSet::eDT_Int);
|
|||
|
|
|
|||
|
|
strResult += QString::number(varVal.toUInt() );
|
|||
|
|
|
|||
|
|
strResult += " $$ msg: ";
|
|||
|
|
|
|||
|
|
// msg
|
|||
|
|
rs.GetValue(varVal, 1, GdSQLite3RecordSet::eDT_Blob);
|
|||
|
|
|
|||
|
|
strResult += varVal.toString();
|
|||
|
|
|
|||
|
|
strResult += "\r\n\r\n";
|
|||
|
|
|
|||
|
|
int jj = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
rs.Close();
|
|||
|
|
|
|||
|
|
ui->m_textEdit_Result->setText(strResult);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MainWindow::InitStyle()
|
|||
|
|
{
|
|||
|
|
m_bMousePressed = false;
|
|||
|
|
|
|||
|
|
//安装事件监听器,让标题栏识别鼠标双击
|
|||
|
|
ui->lblTitle->installEventFilter(this);
|
|||
|
|
/*
|
|||
|
|
this->setWindowFlags(/*Qt::FramelessWindowHint |*
|
|||
|
|
Qt::WindowTitleHint |
|
|||
|
|
Qt::WindowSystemMenuHint);
|
|||
|
|
*/
|
|||
|
|
FramelessHelper *pHelper = new FramelessHelper(this);
|
|||
|
|
pHelper->activateOn(this); //激活当前窗体
|
|||
|
|
pHelper->setTitleHeight(ui->wgtTitleBar->height()); //设置窗体的标题栏高度
|
|||
|
|
|
|||
|
|
CommonHelper::SetStyle("blue");//"blue"//"dark"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
|
|||
|
|
{
|
|||
|
|
//if (ui->lblTitle == obj)
|
|||
|
|
{
|
|||
|
|
if (event->type() == QEvent::MouseButtonPress)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
|
|||
|
|
|
|||
|
|
if (mouseEvent->button() == Qt::LeftButton)
|
|||
|
|
{
|
|||
|
|
m_bMousePressed = true;
|
|||
|
|
m_ptMouse = mouseEvent->globalPos() - pos();
|
|||
|
|
mouseEvent->accept();
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
else if (event->type() == QEvent::MouseMove)
|
|||
|
|
{
|
|||
|
|
QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
|
|||
|
|
|
|||
|
|
if (m_bMousePressed && this->windowState() != Qt::WindowMaximized)
|
|||
|
|
{
|
|||
|
|
if (mouseEvent->globalY() <= qApp->desktop()->availableGeometry().bottom())
|
|||
|
|
{
|
|||
|
|
move(mouseEvent->globalPos() - m_ptMouse);
|
|||
|
|
mouseEvent->accept();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
qApp->desktop()->cursor().setPos(
|
|||
|
|
qApp->desktop()->cursor().pos().x(),
|
|||
|
|
qApp->desktop()->availableGeometry().bottom()
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
else if (event->type() == QEvent::MouseButtonRelease)
|
|||
|
|
{
|
|||
|
|
QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
|
|||
|
|
|
|||
|
|
if (mouseEvent->button() == Qt::LeftButton)
|
|||
|
|
{
|
|||
|
|
m_bMousePressed = false;
|
|||
|
|
mouseEvent->accept();
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return QMainWindow::eventFilter(obj, event);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MainWindow::OnTimer()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MainWindow::ThreadEntry(ThreadRunFunPtr pRunFun, void* pOwner)
|
|||
|
|
{
|
|||
|
|
MainWindow* pThis = reinterpret_cast<MainWindow*>(pOwner);
|
|||
|
|
|
|||
|
|
if (NULL == pThis)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
(pThis->*pRunFun)();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MainWindow::ThreadFun_CaptureDeviceData()
|
|||
|
|
{
|
|||
|
|
timeBeginPeriod(1);
|
|||
|
|
|
|||
|
|
|
|||
|
|
timeEndPeriod(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool MainWindow::StartThread()
|
|||
|
|
{
|
|||
|
|
StopThread();
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
m_bThreadRunning_CaptureDeviceData = true;
|
|||
|
|
m_ptrThread_CaptureDeviceData = new std::thread(std::bind(&MainWindow::ThreadEntry, &MainWindow::ThreadFun_CaptureDeviceData, (void*)this));
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MainWindow::StopThread()
|
|||
|
|
{
|
|||
|
|
//
|
|||
|
|
if(m_bThreadRunning_CaptureDeviceData)
|
|||
|
|
{
|
|||
|
|
m_bThreadRunning_CaptureDeviceData = false;
|
|||
|
|
|
|||
|
|
if(nullptr != m_ptrThread_CaptureDeviceData)
|
|||
|
|
{
|
|||
|
|
m_ptrThread_CaptureDeviceData->join();
|
|||
|
|
|
|||
|
|
delete m_ptrThread_CaptureDeviceData;
|
|||
|
|
m_ptrThread_CaptureDeviceData = nullptr;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|