Files
VoiletMark/src/main.cpp
T
liyepan 5d1fb0fab7 feat: v0.6.0 —— 选中语言(中/英)即时切换,导出不再有预览窗口
导出
- 去掉导出预览对话框:Ctrl+E 直接弹保存对话框,选路径即导出
- 导出失败才弹提示,成功只在状态栏显示一行

多语言
- 新增 LanguageManager:中文(zh_CN)/ 英文(en),视图 → 语言 切换,
  立即生效并记住选择
- 英文翻译由 translations/voiletmark_en.ts(69 条)编译成 .qm 内嵌
- 打包 Qt 官方的 qtbase_zh_CN.qm,文件对话框 / 消息框的按钮也跟着变中文
- 欢迎文档随语言切换(新增英文版)
- retranslateUi 负责菜单、动作、状态栏、侧栏文案的即时刷新

其它
- 删除 ExportDialog 与对应截图,README 同步
2026-10-22 18:07:31 +08:00

74 lines
2.5 KiB
C++

#include "LanguageManager.h"
#include "MainWindow.h"
#include "ThemeManager.h"
#include <QApplication>
#include <QCommandLineOption>
#include <QCommandLineParser>
#include <QIcon>
#include <QPixmap>
#include <QStyleFactory>
#include <QTimer>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
QApplication app(argc, argv);
QApplication::setStyle(QStyleFactory::create(QStringLiteral("Fusion")));
QApplication::setWindowIcon(QIcon(QStringLiteral(":/packaging/voiletmark.png")));
QGuiApplication::setDesktopFileName(QStringLiteral("voiletmark"));
QCoreApplication::setOrganizationName(QStringLiteral("VoiletMark"));
QCoreApplication::setApplicationName(QStringLiteral("VoiletMark"));
QCoreApplication::setApplicationVersion(QStringLiteral(VM_VERSION));
QCommandLineParser parser;
parser.setApplicationDescription(QStringLiteral("VoiletMark — 轻量的跨平台 Markdown 编辑器"));
parser.addHelpOption();
parser.addVersionOption();
QCommandLineOption themeOption(
QStringList{QStringLiteral("t"), QStringLiteral("theme")},
QStringLiteral("启动主题:system / light / dark(仅在本次运行生效)"),
QStringLiteral("mode"));
parser.addOption(themeOption);
QCommandLineOption screenshotOption(
QStringLiteral("screenshot"),
QStringLiteral("渲染一张当前窗口截图后退出(用于调试与视觉回归)"),
QStringLiteral("path"));
parser.addOption(screenshotOption);
parser.addPositionalArgument(QStringLiteral("file"), QStringLiteral("要打开的 Markdown 文件"));
parser.process(app);
ThemeManager::Mode mode = ThemeManager::Mode::System;
if (parser.isSet(themeOption)) {
bool ok = false;
mode = ThemeManager::modeFromString(parser.value(themeOption), &ok);
if (!ok)
mode = ThemeManager::Mode::System;
}
ThemeManager::instance()->initialize(mode, false);
LanguageManager::instance()->initialize();
MainWindow window;
window.show();
const QStringList files = parser.positionalArguments();
if (!files.isEmpty())
window.openPath(files.first());
if (parser.isSet(screenshotOption)) {
const QString path = parser.value(screenshotOption);
QTimer::singleShot(700, &window, [&window, path] {
window.grab().save(path);
QCoreApplication::quit();
});
}
return app.exec();
}