#include #include #include #include #include "gui/MainWindow.h" #include "core/Logger.h" // Redirect Qt log output to file logger. void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) { Q_UNUSED(context); Logger *logger = Logger::instance(); switch (type) { case QtDebugMsg: logger->debug(msg); break; case QtInfoMsg: logger->info(msg); break; case QtWarningMsg: logger->warning(msg); break; case QtCriticalMsg: case QtFatalMsg: logger->error(msg); break; } } int main(int argc, char *argv[]) { QApplication app(argc, argv); app.setOrganizationName("Viewer"); app.setApplicationName("Viewer"); app.setApplicationVersion("0.3.3"); // Prefer LocalAppData so MSI installs under Program Files can always write logs. QString logDir = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation); if (logDir.isEmpty()) { logDir = QCoreApplication::applicationDirPath(); } QDir().mkpath(logDir); const QString logPath = QDir(logDir).filePath("viewer.log"); Logger::instance()->setLogFile(logPath); Logger::instance()->setMaxLines(10000); qInstallMessageHandler(messageHandler); qDebug() << "Viewer started"; qDebug() << "Log file:" << logPath; MainWindow mainWindow; mainWindow.show(); const int result = app.exec(); qDebug() << "Viewer exiting"; return result; }