culturered_client/ProjectorDisplay/main.cpp

80 lines
2.5 KiB
C++
Raw Permalink Normal View History

2024-09-07 03:34:44 +00:00
// FlightController.cpp: 定义应用程序的入口点。
//
#include <QApplication>
#include <QFile>
#include <QDir>
#include <QFontDatabase>
#include <QMessageBox>
#include "MainWindow.h"
#include "VlcMediaPlayer.h"
#include "SpdLog.h"
#include "CrashHandler.h"
#include <Windows.h>
#include <DbgHelp.h>
#pragma comment(lib, "DbgHelp.lib")
using namespace std;
LONG CreateCrashHandler(EXCEPTION_POINTERS* pException) {
QString cur = QDateTime::currentDateTime().toString("yyyy_MM_dd_hh_mm_mm_ss");
QString dumpFileName = qApp->applicationName() + "_Dump_" + cur + ".dump";
EXCEPTION_RECORD* record = pException->ExceptionRecord;
QString errCode = QString::number(record->ExceptionCode, 16);
QString errAddr = QString::number((uint)record->ExceptionAddress, 16);
QString errFlag = QString::number((uint)record->ExceptionFlags, 16);
QString errPara = QString::number(record->NumberParameters, 16);
HANDLE dumpHandle = CreateFile((LPCWSTR)dumpFileName.utf16(), GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (dumpHandle != INVALID_HANDLE_VALUE) {
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), dumpHandle,
MiniDumpNormal, &dumpInfo, NULL, NULL);
CloseHandle(dumpHandle);
}
QMessageBox::warning(nullptr, "dump", QString("ErrorCode%1 ErrorAddr%2 ErrorFlag:%3 ErrorPara:%4").arg(errCode)
.arg(errAddr).arg(errFlag).arg(errPara), QMessageBox::Ok);
return EXCEPTION_EXECUTE_HANDLER;
}
int main(int argc, char* argv[]) {
//#ifdef Q_OS_WIN
// SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CreateCrashHandler);
//#endif
QApplication app(argc, argv);
InstallCrashHandler();
InitSpdlog("ProjectorDisplay_log", "logs/ProjectorDisplay_log.txt", 5);
int fontId = QFontDatabase::addApplicationFont(QApplication::applicationDirPath() + "/ProjectDisplay/font/font.ttf");
QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
if (fontFamilies.size() <= 0) {
qDebug() << "load font failed:" ;
UninitSpdlog();
return -1;
}
VlcMediaPlayer::Init();
MainWindow mainWindow(fontFamilies);
mainWindow.show();
mainWindow.Adjust();
int ret = app.exec();
VlcMediaPlayer::Uninit();
UninitSpdlog();
return ret;
}