导出 - 去掉导出预览对话框:Ctrl+E 直接弹保存对话框,选路径即导出 - 导出失败才弹提示,成功只在状态栏显示一行 多语言 - 新增 LanguageManager:中文(zh_CN)/ 英文(en),视图 → 语言 切换, 立即生效并记住选择 - 英文翻译由 translations/voiletmark_en.ts(69 条)编译成 .qm 内嵌 - 打包 Qt 官方的 qtbase_zh_CN.qm,文件对话框 / 消息框的按钮也跟着变中文 - 欢迎文档随语言切换(新增英文版) - retranslateUi 负责菜单、动作、状态栏、侧栏文案的即时刷新 其它 - 删除 ExportDialog 与对应截图,README 同步
74 lines
2.5 KiB
C++
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();
|
|
}
|