fix: v0.12.1 —— 最近文件 / 最近目录放进菜单栏,去掉多余工具栏

- 删掉上一版单独加的工具栏,不再多占一行
- 「最近文件」「最近目录」改为菜单栏里的顶级菜单,顺序是
  文件 / 编辑 / 视图 / 格式 / 最近文件 / 最近目录 / 帮助
- 文件菜单里不再重复放这两个子菜单
- 去掉工具栏相关的 QSS、成员与英文翻译,截图重新生成
This commit is contained in:
2026-10-23 11:28:28 +08:00
parent 505063a2e7
commit 830ae8c4e3
10 changed files with 180 additions and 240 deletions
+5 -6
View File
@@ -2,12 +2,12 @@
一个轻量的跨平台 Markdown 编辑器,基于 **Qt 5 / C++17** 构建。
当前版本 **0.12.0**。
当前版本 **0.12.1**。
## 界面
窗口从上到下依次是菜单栏、工具栏、侧栏 + 编辑区、状态栏。工具栏固定放
**新建 / 打开 / 保存**,以及 **最近文件**、**最近目录** 两个下拉菜单。
窗口从上到下依次是菜单栏、侧栏 + 编辑区、状态栏。菜单栏依次是
**文件 / 编辑 / 视图 / 格式 / 最近文件 / 最近目录 / 帮助**。
| 浅色 · 编辑模式 | 深色 · 编辑模式 |
| --- | --- |
@@ -125,8 +125,7 @@ Windows / macOS 保留系统原生对话框。
### 文件
- 新建、打开、保存、另存为
- **最近文件** / **最近目录**:各记 8 条,文件菜单和工具栏上的下拉菜单都能打开,
两个列表可以分别清空
- **最近文件** / **最近目录**:菜单栏上各有一个下拉菜单,各记 8 条,两个列表可以分别清空
- **启动时自动打开上次编辑的文件**;文件已经被删掉就退回欢迎文档
- 保留原文件的 **BOM** 与 **CRLF** 换行风格,保存时原子写入(`QSaveFile`)
- 关闭或切换文件时提示未保存的修改
@@ -256,7 +255,7 @@ src/
├── ThemeManager.{h,cpp} 四种主题模式 + 系统检测 + 调色板 / QSS 生成
├── LanguageManager.{h,cpp} 中英文切换
├── AppConfig.{h,cpp} 所有设置共用的 config.ini
├── MainWindow.{h,cpp} 菜单、工具栏、文件读写、侧栏、Git 工具栏、状态栏、设置
├── MainWindow.{h,cpp} 菜单、文件读写、侧栏、Git 工具栏、状态栏、设置
├── MarkdownEditor.{h,cpp} 编辑器控件:行号、缩进、代码框装饰、源码模式
├── MarkdownHighlighter.{h,cpp} Markdown 着色与就地渲染
├── CodeHighlight.{h,cpp} 多语言语法高亮 tokenizer
+1 -1
View File
@@ -1,6 +1,6 @@
TEMPLATE = app
TARGET = VoiletMark
VERSION = 0.12.0
VERSION = 0.12.1
QT += core gui widgets
Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 112 KiB

+4 -43
View File
@@ -44,7 +44,6 @@
#include <QTextCursor>
#include <QTextDocument>
#include <QTimer>
#include <QToolBar>
#include <QToolButton>
#include <QVBoxLayout>
#include <QWidget>
@@ -179,7 +178,6 @@ MainWindow::MainWindow(QWidget *parent)
createActions();
createMenus();
createToolBar();
createSidebar();
createStatusBar();
loadSettings();
@@ -210,37 +208,6 @@ MainWindow::MainWindow(QWidget *parent)
m_editor->setFocus();
}
void MainWindow::createToolBar()
{
m_toolBar = addToolBar(tr("常用"));
m_toolBar->setObjectName(QStringLiteral("mainToolBar"));
m_toolBar->setMovable(false);
m_toolBar->setToolButtonStyle(Qt::ToolButtonTextOnly);
m_toolBar->setIconSize(QSize(16, 16));
m_toolBar->addAction(m_newAction);
m_toolBar->addAction(m_openAction);
m_toolBar->addAction(m_saveAction);
m_toolBar->addSeparator();
const auto makeMenuButton = [this](const QString &text, QMenu **target) {
QToolButton *button = new QToolButton(m_toolBar);
button->setText(text);
button->setPopupMode(QToolButton::InstantPopup);
button->setToolButtonStyle(Qt::ToolButtonTextOnly);
button->setCursor(Qt::PointingHandCursor);
QMenu *menu = new QMenu(button);
button->setMenu(menu);
m_toolBar->addWidget(button);
*target = menu;
return button;
};
m_toolRecentFilesButton = makeMenuButton(tr("最近文件"), &m_toolRecentFilesMenu);
m_toolRecentFoldersButton = makeMenuButton(tr("最近目录"), &m_toolRecentFoldersMenu);
}
void MainWindow::createActions()
{
m_newAction = new QAction(tr("新建"), this);
@@ -485,8 +452,6 @@ void MainWindow::createMenus()
m_fileMenu->addAction(m_newAction);
m_fileMenu->addAction(m_openAction);
m_fileMenu->addAction(m_openFolderAction);
m_recentMenu = m_fileMenu->addMenu(tr("最近文件"));
m_recentFolderMenu = m_fileMenu->addMenu(tr("最近目录"));
m_fileMenu->addSeparator();
m_fileMenu->addAction(m_saveAction);
m_fileMenu->addAction(m_saveAsAction);
@@ -566,6 +531,10 @@ void MainWindow::createMenus()
}
m_formatMenu->addAction(m_codeBlockAction);
// 「最近文件」「最近目录」直接排进菜单栏,「帮助」固定在最后
m_recentMenu = menuBar()->addMenu(tr("最近文件"));
m_recentFolderMenu = menuBar()->addMenu(tr("最近目录"));
m_helpMenu = menuBar()->addMenu(tr("帮助"));
m_aboutAction = m_helpMenu->addAction(tr("关于 VoiletMark"), this, &MainWindow::showAbout);
}
@@ -1004,12 +973,6 @@ void MainWindow::retranslateUi()
m_helpMenu->setTitle(tr("帮助"));
m_recentMenu->setTitle(tr("最近文件"));
m_recentFolderMenu->setTitle(tr("最近目录"));
if (m_toolBar)
m_toolBar->setWindowTitle(tr("常用"));
if (m_toolRecentFilesButton)
m_toolRecentFilesButton->setText(tr("最近文件"));
if (m_toolRecentFoldersButton)
m_toolRecentFoldersButton->setText(tr("最近目录"));
m_themeMenu->setTitle(tr("主题"));
m_headingMenu->setTitle(tr("标题"));
m_languageMenu->setTitle(tr("语言"));
@@ -1120,9 +1083,7 @@ void MainWindow::loadRecentFiles()
void MainWindow::refreshRecentMenu()
{
fillRecentFilesMenu(m_recentMenu);
fillRecentFilesMenu(m_toolRecentFilesMenu);
fillRecentFoldersMenu(m_recentFolderMenu);
fillRecentFoldersMenu(m_toolRecentFoldersMenu);
}
void MainWindow::fillRecentFilesMenu(QMenu *menu)
-7
View File
@@ -10,7 +10,6 @@ class QDockWidget;
class QLabel;
class QPushButton;
class QStackedWidget;
class QToolBar;
class QToolButton;
class GitRunner;
class QListWidget;
@@ -36,7 +35,6 @@ private:
enum class Eol { Lf, Crlf };
void createActions();
void createToolBar();
void createSidebar();
void createMenus();
void createStatusBar();
@@ -180,11 +178,6 @@ private:
QMenu *m_recentMenu = nullptr;
QMenu *m_recentFolderMenu = nullptr;
QMenu *m_toolRecentFilesMenu = nullptr;
QMenu *m_toolRecentFoldersMenu = nullptr;
QToolButton *m_toolRecentFilesButton = nullptr;
QToolButton *m_toolRecentFoldersButton = nullptr;
QToolBar *m_toolBar = nullptr;
QMenu *m_fileMenu = nullptr;
QMenu *m_editMenu = nullptr;
QMenu *m_viewMenu = nullptr;
+1 -4
View File
@@ -284,9 +284,6 @@ QMenu::item { padding: 6px 28px 6px 22px; border-radius: 5px; }
QMenu::item:selected { background-color: @highlight; color: @highlightedText; }
QMenu::item:disabled { color: @disabled; }
QMenu::separator { height: 1px; background-color: @border; margin: 5px 8px; }
QToolBar { background-color: @window; border: none; border-bottom: 1px solid @border;
spacing: 2px; padding: 2px 6px; }
QToolBar::separator { width: 1px; background-color: @border; margin: 4px 6px; }
QStatusBar { background-color: @window; color: @placeholder; border-top: 1px solid @border; }
QStatusBar::item { border: none; }
QPlainTextEdit { background-color: @editorBase; color: @editorText; border: none;
@@ -308,7 +305,7 @@ QPushButton { background-color: @button; color: @buttonText; border: 1px solid @
QPushButton:hover { background-color: @highlight; color: @highlightedText; }
QPushButton:default { background-color: @accent; color: #ffffff; border-color: @accent; }
QToolTip { background-color: @menuBackground; color: @text; border: 1px solid @border; padding: 4px; }
QToolButton { border: none; border-radius: 5px; padding: 2px 8px; color: @text; background: transparent; }
QToolButton { border: none; border-radius: 5px; padding: 3px 8px; color: @text; background: transparent; }
QToolButton:hover { background-color: @hoverBackground; }
QToolButton:checked { background-color: @highlight; color: @highlightedText; }
QDockWidget { color: @text; }
Binary file not shown.
+169 -179
View File
@@ -14,487 +14,477 @@
<context>
<name>MainWindow</name>
<message>
<location filename="../src/MainWindow.cpp" line="246"/>
<location filename="../src/MainWindow.cpp" line="1009"/>
<location filename="../src/MainWindow.cpp" line="213"/>
<location filename="../src/MainWindow.cpp" line="980"/>
<source>新建</source>
<translation>New</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="250"/>
<location filename="../src/MainWindow.cpp" line="1010"/>
<location filename="../src/MainWindow.cpp" line="217"/>
<location filename="../src/MainWindow.cpp" line="981"/>
<source>打开…</source>
<translation>Open…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="254"/>
<location filename="../src/MainWindow.cpp" line="1012"/>
<location filename="../src/MainWindow.cpp" line="221"/>
<location filename="../src/MainWindow.cpp" line="983"/>
<source>保存</source>
<translation>Save</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="258"/>
<location filename="../src/MainWindow.cpp" line="1013"/>
<location filename="../src/MainWindow.cpp" line="225"/>
<location filename="../src/MainWindow.cpp" line="984"/>
<source>另存为…</source>
<translation>Save As…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="262"/>
<location filename="../src/MainWindow.cpp" line="1014"/>
<location filename="../src/MainWindow.cpp" line="229"/>
<location filename="../src/MainWindow.cpp" line="985"/>
<source>导出 PDF…</source>
<translation>Export PDF…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="266"/>
<location filename="../src/MainWindow.cpp" line="1015"/>
<location filename="../src/MainWindow.cpp" line="233"/>
<location filename="../src/MainWindow.cpp" line="986"/>
<source>退出</source>
<translation>Quit</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="270"/>
<location filename="../src/MainWindow.cpp" line="1017"/>
<location filename="../src/MainWindow.cpp" line="237"/>
<location filename="../src/MainWindow.cpp" line="988"/>
<source>撤销</source>
<translation>Undo</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="274"/>
<location filename="../src/MainWindow.cpp" line="1018"/>
<location filename="../src/MainWindow.cpp" line="241"/>
<location filename="../src/MainWindow.cpp" line="989"/>
<source>重做</source>
<translation>Redo</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="278"/>
<location filename="../src/MainWindow.cpp" line="1019"/>
<location filename="../src/MainWindow.cpp" line="245"/>
<location filename="../src/MainWindow.cpp" line="990"/>
<source>剪切</source>
<translation>Cut</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="282"/>
<location filename="../src/MainWindow.cpp" line="1020"/>
<location filename="../src/MainWindow.cpp" line="249"/>
<location filename="../src/MainWindow.cpp" line="991"/>
<source>复制</source>
<translation>Copy</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="286"/>
<location filename="../src/MainWindow.cpp" line="1021"/>
<location filename="../src/MainWindow.cpp" line="253"/>
<location filename="../src/MainWindow.cpp" line="992"/>
<source>粘贴</source>
<translation>Paste</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="290"/>
<location filename="../src/MainWindow.cpp" line="1022"/>
<location filename="../src/MainWindow.cpp" line="257"/>
<location filename="../src/MainWindow.cpp" line="993"/>
<source>全选</source>
<translation>Select All</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="294"/>
<location filename="../src/MainWindow.cpp" line="1026"/>
<location filename="../src/MainWindow.cpp" line="261"/>
<location filename="../src/MainWindow.cpp" line="997"/>
<source>自动换行</source>
<translation>Word Wrap</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="299"/>
<location filename="../src/MainWindow.cpp" line="1027"/>
<location filename="../src/MainWindow.cpp" line="266"/>
<location filename="../src/MainWindow.cpp" line="998"/>
<source>放大</source>
<translation>Zoom In</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="303"/>
<location filename="../src/MainWindow.cpp" line="1028"/>
<location filename="../src/MainWindow.cpp" line="270"/>
<location filename="../src/MainWindow.cpp" line="999"/>
<source>缩小</source>
<translation>Zoom Out</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="307"/>
<location filename="../src/MainWindow.cpp" line="1029"/>
<location filename="../src/MainWindow.cpp" line="274"/>
<location filename="../src/MainWindow.cpp" line="1000"/>
<source>实际大小</source>
<translation>Actual Size</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="316"/>
<location filename="../src/MainWindow.cpp" line="1011"/>
<location filename="../src/MainWindow.cpp" line="283"/>
<location filename="../src/MainWindow.cpp" line="982"/>
<source>打开文件夹…</source>
<translation>Open Folder…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="320"/>
<location filename="../src/MainWindow.cpp" line="577"/>
<location filename="../src/MainWindow.cpp" line="1024"/>
<location filename="../src/MainWindow.cpp" line="1045"/>
<location filename="../src/MainWindow.cpp" line="287"/>
<location filename="../src/MainWindow.cpp" line="546"/>
<location filename="../src/MainWindow.cpp" line="995"/>
<location filename="../src/MainWindow.cpp" line="1016"/>
<source>侧栏</source>
<translation>Sidebar</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="334"/>
<location filename="../src/MainWindow.cpp" line="1025"/>
<location filename="../src/MainWindow.cpp" line="301"/>
<location filename="../src/MainWindow.cpp" line="996"/>
<source>源代码模式</source>
<translation>Source Mode</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="339"/>
<location filename="../src/MainWindow.cpp" line="1041"/>
<location filename="../src/MainWindow.cpp" line="306"/>
<location filename="../src/MainWindow.cpp" line="1012"/>
<source>代码块</source>
<translation>Code Block</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="346"/>
<location filename="../src/MainWindow.cpp" line="1039"/>
<location filename="../src/MainWindow.cpp" line="313"/>
<location filename="../src/MainWindow.cpp" line="1010"/>
<source>标题 %1</source>
<translation>Heading %1</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="357"/>
<location filename="../src/MainWindow.cpp" line="324"/>
<source>文件夹</source>
<translation>Folder</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="392"/>
<location filename="../src/MainWindow.cpp" line="1243"/>
<location filename="../src/MainWindow.cpp" line="359"/>
<location filename="../src/MainWindow.cpp" line="1212"/>
<source>未打开文件夹</source>
<translation>No folder open</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="434"/>
<location filename="../src/MainWindow.cpp" line="1376"/>
<location filename="../src/MainWindow.cpp" line="401"/>
<location filename="../src/MainWindow.cpp" line="1345"/>
<source>Git 仓库</source>
<translation>Git repository</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="447"/>
<location filename="../src/MainWindow.cpp" line="1524"/>
<location filename="../src/MainWindow.cpp" line="414"/>
<location filename="../src/MainWindow.cpp" line="1493"/>
<source>拉取</source>
<translation>Pull</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="447"/>
<location filename="../src/MainWindow.cpp" line="414"/>
<source>git pull --ff-only</source>
<translation>git pull --ff-only</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="446"/>
<location filename="../src/MainWindow.cpp" line="1532"/>
<location filename="../src/MainWindow.cpp" line="413"/>
<location filename="../src/MainWindow.cpp" line="1501"/>
<source>获取</source>
<translation>Fetch</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="446"/>
<location filename="../src/MainWindow.cpp" line="413"/>
<source>git fetch --all --prune</source>
<translation>git fetch --all --prune</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="450"/>
<location filename="../src/MainWindow.cpp" line="1539"/>
<location filename="../src/MainWindow.cpp" line="1647"/>
<location filename="../src/MainWindow.cpp" line="417"/>
<location filename="../src/MainWindow.cpp" line="1508"/>
<location filename="../src/MainWindow.cpp" line="1616"/>
<source>推送</source>
<translation>Push</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="450"/>
<location filename="../src/MainWindow.cpp" line="417"/>
<source>git push</source>
<translation>git push</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1546"/>
<location filename="../src/MainWindow.cpp" line="1515"/>
<source>暂存</source>
<translation>Stage</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="448"/>
<location filename="../src/MainWindow.cpp" line="415"/>
<source>git add -A</source>
<translation>git add -A</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="449"/>
<location filename="../src/MainWindow.cpp" line="1559"/>
<location filename="../src/MainWindow.cpp" line="1566"/>
<location filename="../src/MainWindow.cpp" line="1570"/>
<location filename="../src/MainWindow.cpp" line="1646"/>
<location filename="../src/MainWindow.cpp" line="416"/>
<location filename="../src/MainWindow.cpp" line="1528"/>
<location filename="../src/MainWindow.cpp" line="1535"/>
<location filename="../src/MainWindow.cpp" line="1539"/>
<location filename="../src/MainWindow.cpp" line="1615"/>
<source>提交</source>
<translation>Commit</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="449"/>
<location filename="../src/MainWindow.cpp" line="416"/>
<source>把暂存区的内容提交</source>
<translation>Commit the staged changes</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="382"/>
<location filename="../src/MainWindow.cpp" line="484"/>
<location filename="../src/MainWindow.cpp" line="999"/>
<location filename="../src/MainWindow.cpp" line="349"/>
<location filename="../src/MainWindow.cpp" line="451"/>
<location filename="../src/MainWindow.cpp" line="969"/>
<source>文件</source>
<translation>File</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="383"/>
<location filename="../src/MainWindow.cpp" line="350"/>
<source>目录</source>
<translation>Outline</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1004"/>
<source>最近打开</source>
<translation>Recent Files</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="497"/>
<location filename="../src/MainWindow.cpp" line="1000"/>
<location filename="../src/MainWindow.cpp" line="462"/>
<location filename="../src/MainWindow.cpp" line="970"/>
<source>编辑</source>
<translation>Edit</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="215"/>
<source>常用</source>
<translation>Quick Access</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="240"/>
<location filename="../src/MainWindow.cpp" line="488"/>
<location filename="../src/MainWindow.cpp" line="535"/>
<location filename="../src/MainWindow.cpp" line="974"/>
<source>最近文件</source>
<translation>Recent Files</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="241"/>
<location filename="../src/MainWindow.cpp" line="489"/>
<location filename="../src/MainWindow.cpp" line="536"/>
<location filename="../src/MainWindow.cpp" line="975"/>
<source>最近目录</source>
<translation>Recent Folders</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="507"/>
<location filename="../src/MainWindow.cpp" line="1001"/>
<location filename="../src/MainWindow.cpp" line="472"/>
<location filename="../src/MainWindow.cpp" line="971"/>
<source>视图</source>
<translation>View</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="518"/>
<location filename="../src/MainWindow.cpp" line="1005"/>
<location filename="../src/MainWindow.cpp" line="483"/>
<location filename="../src/MainWindow.cpp" line="976"/>
<source>主题</source>
<translation>Theme</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="526"/>
<location filename="../src/MainWindow.cpp" line="1035"/>
<location filename="../src/MainWindow.cpp" line="491"/>
<location filename="../src/MainWindow.cpp" line="1006"/>
<source>6:00–18:00 使用浅色,其余时间使用深色</source>
<translation>Light from 6:00 to 18:00, dark the rest of the day</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="544"/>
<location filename="../src/MainWindow.cpp" line="1007"/>
<location filename="../src/MainWindow.cpp" line="509"/>
<location filename="../src/MainWindow.cpp" line="978"/>
<source>语言</source>
<translation>Language</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="561"/>
<location filename="../src/MainWindow.cpp" line="1002"/>
<location filename="../src/MainWindow.cpp" line="526"/>
<location filename="../src/MainWindow.cpp" line="972"/>
<source>格式</source>
<translation>Format</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="562"/>
<location filename="../src/MainWindow.cpp" line="1006"/>
<location filename="../src/MainWindow.cpp" line="527"/>
<location filename="../src/MainWindow.cpp" line="977"/>
<source>标题</source>
<translation>Heading</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="569"/>
<location filename="../src/MainWindow.cpp" line="1003"/>
<location filename="../src/MainWindow.cpp" line="538"/>
<location filename="../src/MainWindow.cpp" line="973"/>
<source>帮助</source>
<translation>Help</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="570"/>
<location filename="../src/MainWindow.cpp" line="1042"/>
<location filename="../src/MainWindow.cpp" line="1072"/>
<location filename="../src/MainWindow.cpp" line="539"/>
<location filename="../src/MainWindow.cpp" line="1013"/>
<location filename="../src/MainWindow.cpp" line="1043"/>
<source>关于 VoiletMark</source>
<translation>About VoiletMark</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="581"/>
<location filename="../src/MainWindow.cpp" line="1046"/>
<location filename="../src/MainWindow.cpp" line="550"/>
<location filename="../src/MainWindow.cpp" line="1017"/>
<source>显示 / 隐藏文件夹侧栏(Ctrl+B)</source>
<translation>Show / hide the folder sidebar (Ctrl+B)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="589"/>
<location filename="../src/MainWindow.cpp" line="1049"/>
<location filename="../src/MainWindow.cpp" line="558"/>
<location filename="../src/MainWindow.cpp" line="1020"/>
<source>源代码模式:关闭语法高亮与行号(Ctrl+Shift+M)</source>
<translation>Source mode: turn off highlighting and line numbers (Ctrl+Shift+M)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="673"/>
<location filename="../src/MainWindow.cpp" line="804"/>
<location filename="../src/MainWindow.cpp" line="643"/>
<location filename="../src/MainWindow.cpp" line="774"/>
<source>未命名</source>
<translation>Untitled</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="722"/>
<location filename="../src/MainWindow.cpp" line="692"/>
<source>打开 Markdown 文件</source>
<translation>Open Markdown File</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="723"/>
<location filename="../src/MainWindow.cpp" line="693"/>
<source>Markdown 文件 (*.md *.markdown *.mdown *.mkd);;文本文件 (*.txt);;所有文件 (*)</source>
<translation>Markdown files (*.md *.markdown *.mdown *.mkd);;Text files (*.txt);;All files (*)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="741"/>
<location filename="../src/MainWindow.cpp" line="711"/>
<source>无法打开文件</source>
<translation>Cannot Open File</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="742"/>
<location filename="../src/MainWindow.cpp" line="712"/>
<source>读取「%1」失败:%2</source>
<translation>Could not read &quot;%1&quot;: %2</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="776"/>
<location filename="../src/MainWindow.cpp" line="746"/>
<source>另存为</source>
<translation>Save As</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="777"/>
<location filename="../src/MainWindow.cpp" line="747"/>
<source>Markdown 文件 (*.md);;文本文件 (*.txt);;所有文件 (*)</source>
<translation>Markdown files (*.md);;Text files (*.txt);;All files (*)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="809"/>
<location filename="../src/MainWindow.cpp" line="779"/>
<source>导出 PDF</source>
<translation>Export PDF</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="810"/>
<location filename="../src/MainWindow.cpp" line="780"/>
<source>PDF 文件 (*.pdf)</source>
<translation>PDF files (*.pdf)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="817"/>
<location filename="../src/MainWindow.cpp" line="787"/>
<source>正在导出 PDF…</source>
<translation>Exporting PDF…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="854"/>
<location filename="../src/MainWindow.cpp" line="864"/>
<location filename="../src/MainWindow.cpp" line="824"/>
<location filename="../src/MainWindow.cpp" line="834"/>
<source>导出失败</source>
<translation>Export Failed</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="854"/>
<location filename="../src/MainWindow.cpp" line="824"/>
<source>文档排版结果异常,已中止导出。</source>
<translation>The document layout looks broken; export was aborted.</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="865"/>
<location filename="../src/MainWindow.cpp" line="835"/>
<source>没能写出「%1」,换个位置再试一次。</source>
<translation>Could not write &quot;%1&quot;. Try another location.</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="869"/>
<location filename="../src/MainWindow.cpp" line="839"/>
<source>已导出 %1</source>
<translation>Exported to %1</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="884"/>
<location filename="../src/MainWindow.cpp" line="891"/>
<location filename="../src/MainWindow.cpp" line="896"/>
<location filename="../src/MainWindow.cpp" line="854"/>
<location filename="../src/MainWindow.cpp" line="861"/>
<location filename="../src/MainWindow.cpp" line="866"/>
<source>无法保存文件</source>
<translation>Cannot Save File</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="885"/>
<location filename="../src/MainWindow.cpp" line="855"/>
<source>写入「%1」失败:%2</source>
<translation>Could not write &quot;%1&quot;: %2</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="892"/>
<location filename="../src/MainWindow.cpp" line="862"/>
<source>写入「%1」时发生错误。</source>
<translation>An error occurred while writing &quot;%1&quot;.</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="897"/>
<location filename="../src/MainWindow.cpp" line="867"/>
<source>提交「%1」失败:%2</source>
<translation>Could not commit &quot;%1&quot;: %2</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="905"/>
<location filename="../src/MainWindow.cpp" line="875"/>
<source>已保存 %1</source>
<translation>Saved to %1</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="915"/>
<location filename="../src/MainWindow.cpp" line="885"/>
<source>VoiletMark</source>
<translation>VoiletMark</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="916"/>
<location filename="../src/MainWindow.cpp" line="886"/>
<source>「%1」有未保存的修改,是否保存?</source>
<translation>&quot;%1&quot; has unsaved changes. Save them?</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="941"/>
<location filename="../src/MainWindow.cpp" line="911"/>
<source>%1[*] — VoiletMark</source>
<translation>%1[*] — VoiletMark</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="960"/>
<location filename="../src/MainWindow.cpp" line="930"/>
<source>行 %1,列 %2</source>
<translation>Line %1, Col %2</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="962"/>
<location filename="../src/MainWindow.cpp" line="932"/>
<source> 已选 %1 字</source>
<translation> %1 selected</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="963"/>
<location filename="../src/MainWindow.cpp" line="933"/>
<source> %1 字</source>
<translation> %1 chars</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1076"/>
<location filename="../src/MainWindow.cpp" line="1047"/>
<source>&lt;h3&gt;VoiletMark %1&lt;/h3&gt;&lt;p&gt;一个轻量的跨平台 Markdown 编辑器。&lt;/p&gt;&lt;p&gt;基于 Qt %2 与 C++17 构建。&lt;/p&gt;</source>
<translation>&lt;h3&gt;VoiletMark %1&lt;/h3&gt;&lt;p&gt;A lightweight cross-platform Markdown editor.&lt;/p&gt;&lt;p&gt;Built with Qt %2 and C++17.&lt;/p&gt;</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1082"/>
<location filename="../src/MainWindow.cpp" line="1053"/>
<source>配置文件:%1</source>
<translation>Config file: %1</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1127"/>
<location filename="../src/MainWindow.cpp" line="1152"/>
<location filename="../src/MainWindow.cpp" line="1096"/>
<location filename="../src/MainWindow.cpp" line="1121"/>
<source>(暂无记录)</source>
<translation>(none)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1138"/>
<location filename="../src/MainWindow.cpp" line="1163"/>
<location filename="../src/MainWindow.cpp" line="1107"/>
<location filename="../src/MainWindow.cpp" line="1132"/>
<source>清空列表</source>
<translation>Clear List</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1185"/>
<location filename="../src/MainWindow.cpp" line="1154"/>
<source>打开文件夹</source>
<translation>Open Folder</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1244"/>
<location filename="../src/MainWindow.cpp" line="1213"/>
<source>文件 → 打开文件夹…</source>
<translation>File → Open Folder…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1280"/>
<location filename="../src/MainWindow.cpp" line="1249"/>
<source>(没有 Markdown 文件)</source>
<translation>(no Markdown files)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1412"/>
<location filename="../src/MainWindow.cpp" line="1381"/>
<source>正在%1…</source>
<translation>%1…</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1422"/>
<location filename="../src/MainWindow.cpp" line="1391"/>
<source>Git 操作失败</source>
<translation>Git Operation Failed</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1423"/>
<location filename="../src/MainWindow.cpp" line="1392"/>
<source>%1失败:
%2</source>
@@ -503,69 +493,69 @@
%2</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1424"/>
<location filename="../src/MainWindow.cpp" line="1393"/>
<source>(没有输出)</source>
<translation>(no output)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1430"/>
<location filename="../src/MainWindow.cpp" line="1399"/>
<source>%1完成</source>
<translation>%1 finished</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1505"/>
<location filename="../src/MainWindow.cpp" line="1474"/>
<source>(没有标题)</source>
<translation>(no headings)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1560"/>
<location filename="../src/MainWindow.cpp" line="1529"/>
<source>暂存区是空的,先点「暂存」把所有改动加进去。</source>
<translation>Nothing is staged yet. Click &quot;Stage&quot; first to add all changes.</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1566"/>
<location filename="../src/MainWindow.cpp" line="1535"/>
<source>提交说明:</source>
<translation>Commit message:</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1578"/>
<location filename="../src/MainWindow.cpp" line="1547"/>
<source>添加到提交</source>
<translation>Add to commit</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1597"/>
<location filename="../src/MainWindow.cpp" line="1566"/>
<source>「%1」已经在 .gitignore 里了</source>
<translation>&quot;%1&quot; is already in .gitignore</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1603"/>
<location filename="../src/MainWindow.cpp" line="1572"/>
<source>忽略文件</source>
<translation>Ignore File</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1604"/>
<location filename="../src/MainWindow.cpp" line="1573"/>
<source>打不开 .gitignore:%1</source>
<translation>Cannot open .gitignore: %1</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1611"/>
<location filename="../src/MainWindow.cpp" line="1580"/>
<source>已把 %1 写进 .gitignore</source>
<translation>Added %1 to .gitignore</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1626"/>
<location filename="../src/MainWindow.cpp" line="1631"/>
<location filename="../src/MainWindow.cpp" line="1669"/>
<location filename="../src/MainWindow.cpp" line="1595"/>
<location filename="../src/MainWindow.cpp" line="1600"/>
<location filename="../src/MainWindow.cpp" line="1638"/>
<source>删除远端</source>
<translation>Delete from remote</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1627"/>
<location filename="../src/MainWindow.cpp" line="1596"/>
<source>「%1」没有被 git 跟踪,远端本来就没有它。</source>
<translation>&quot;%1&quot; is not tracked by git, so the remote never had it.</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1632"/>
<location filename="../src/MainWindow.cpp" line="1601"/>
<source>从仓库删除「%1」并推送到远端?
本地文件会保留,远端和别人 pull 下来的仓库里会删掉它。</source>
@@ -574,53 +564,53 @@
Your local file is kept, but the remote copy and everyone else&apos;s will be deleted.</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1636"/>
<location filename="../src/MainWindow.cpp" line="1605"/>
<source>删除并推送</source>
<translation>Delete and push</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1645"/>
<location filename="../src/MainWindow.cpp" line="1614"/>
<source>chore: 从仓库删除 %1</source>
<translation>chore: remove %1 from repository</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="448"/>
<location filename="../src/MainWindow.cpp" line="1664"/>
<location filename="../src/MainWindow.cpp" line="415"/>
<location filename="../src/MainWindow.cpp" line="1633"/>
<source>添加</source>
<translation>Add</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1665"/>
<location filename="../src/MainWindow.cpp" line="1634"/>
<source>git add 这个文件</source>
<translation>git add this file</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1666"/>
<location filename="../src/MainWindow.cpp" line="1635"/>
<source>忽略</source>
<translation>Ignore</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1667"/>
<location filename="../src/MainWindow.cpp" line="1636"/>
<source>把路径写进 .gitignore(不改仓库里已跟踪的文件)</source>
<translation>Add the path to .gitignore (does not untrack files already in the repo)</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1670"/>
<location filename="../src/MainWindow.cpp" line="1639"/>
<source>git rm --cached 后提交并推送:远端删除,本地保留</source>
<translation>git rm --cached, then commit and push: gone from the remote, kept locally</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1637"/>
<location filename="../src/MainWindow.cpp" line="1606"/>
<source>取消</source>
<translation>Cancel</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1643"/>
<location filename="../src/MainWindow.cpp" line="1612"/>
<source>从仓库移除</source>
<translation>Remove from repository</translation>
</message>
<message>
<location filename="../src/MainWindow.cpp" line="1660"/>
<location filename="../src/MainWindow.cpp" line="1629"/>
<source>打开</source>
<translation>Open</translation>
</message>
@@ -669,22 +659,22 @@ Your local file is kept, but the remote copy and everyone else&apos;s will be de
<context>
<name>QObject</name>
<message>
<location filename="../src/ThemeManager.cpp" line="369"/>
<location filename="../src/ThemeManager.cpp" line="366"/>
<source>浅色</source>
<translation>Light</translation>
</message>
<message>
<location filename="../src/ThemeManager.cpp" line="370"/>
<location filename="../src/ThemeManager.cpp" line="367"/>
<source>深色</source>
<translation>Dark</translation>
</message>
<message>
<location filename="../src/ThemeManager.cpp" line="371"/>
<location filename="../src/ThemeManager.cpp" line="368"/>
<source>按时段自动</source>
<translation>Scheduled</translation>
</message>
<message>
<location filename="../src/ThemeManager.cpp" line="374"/>
<location filename="../src/ThemeManager.cpp" line="371"/>
<source>跟随系统</source>
<translation>Follow System</translation>
</message>