Files
CodeRepository/Samples/Sample.SQLite3/mainwindow.cpp

349 lines
9.1 KiB
C++
Raw Normal View History

#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;
}
}
}