Files
CodeRepository/Samples/Sample.YAML-CPP/mainwindow.cpp

268 lines
6.3 KiB
C++
Raw Normal View History

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "../Common/include/yaml-cpp/yaml.h"
#include "commonhelper.h"
#include "frameless_helper.h"
#include <fstream>
#include <sstream>
#include <QMessageBox>
#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 = false;
m_ptrThread = nullptr;
// 初始化界面
InitStyle();
// 加载信号槽函数连接
Connect();
}
MainWindow::~MainWindow()
{
//
Disconnect();
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_LoadFile, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
connect(ui->m_pushButton_GenerateFile, &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_LoadFile, &QPushButton::clicked, this, &MainWindow::OnButtonClicked);
disconnect(ui->m_pushButton_GenerateFile, &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_LoadFile)
{
LoadYAMLFile();
}
if(sender() == ui->m_pushButton_GenerateFile)
{
GenerateYAMLFile();
}
}
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()
{
}
bool MainWindow::LoadYAMLFile()
{
YAML::Node config = YAML::LoadFile("yaml.txt");
QString str = config["name"].as<std::string>().c_str();
str = config["skills"]["c++"]["cpp11"].as<std::string>().c_str();
str = config["age"].as<std::string>().c_str();
std::ostringstream oss;
oss << config;
str = oss.str().c_str();
ui->m_textEdit_Result->setText(str);
return true;
}
bool MainWindow::GenerateYAMLFile()
{
YAML::Node config;
config["name"] = "guide coder";
config["skills"]["c++"]["cpp11"] = "c++11";
config["skills"]["c++"]["cpp14"] = "c++14";
config["skills"]["c++"]["cpp17"] = "c++17";
config["skills"]["c++"]["cpp19"] = "c++19";
config["skills"]["c++"]["cpp22"] = "c++22";
config["age"] = "22";
std::ofstream varGenYamlFile("yaml.txt");
varGenYamlFile << config;
varGenYamlFile.close();
return true;
}
void MainWindow::ThreadEntry(ThreadRunFunPtr pRunFun, void* pOwner)
{
MainWindow* pThis = reinterpret_cast<MainWindow*>(pOwner);
if (NULL == pThis)
{
return;
}
(pThis->*pRunFun)();
}
void MainWindow::ThreadFun()
{
timeBeginPeriod(1);
timeEndPeriod(1);
}
bool MainWindow::StartThread()
{
StopThread();
//
m_bThreadRunning = true;
m_ptrThread = new std::thread(std::bind(&MainWindow::ThreadEntry, &MainWindow::ThreadFun, (void*)this));
return true;
}
void MainWindow::StopThread()
{
//
if(m_bThreadRunning)
{
m_bThreadRunning = false;
if(nullptr != m_ptrThread)
{
m_ptrThread->join();
delete m_ptrThread;
m_ptrThread = nullptr;
}
}
}