Files
VoiletMark/src/MainWindow.h
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

140 lines
3.6 KiB
C++

#pragma once
#include <QMainWindow>
#include <QStringList>
class QAction;
class QActionGroup;
class QDockWidget;
class QLabel;
class QListWidget;
class QListWidgetItem;
class QMenu;
class QTextDocument;
class QToolButton;
class MarkdownEditor;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
bool openPath(const QString &path);
protected:
void closeEvent(QCloseEvent *event) override;
private:
enum class Eol { Lf, Crlf };
void createActions();
void createSidebar();
void createMenus();
void createStatusBar();
void loadSettings();
void saveSettings();
void newFile();
void openFile();
bool saveFile();
bool saveFileAs();
bool maybeSave();
bool writeToFile(const QString &path);
void setCurrentFile(const QString &path);
void showWelcomeDocument();
void addRecentFile(const QString &path);
void refreshRecentMenu();
void loadRecentFiles();
void chooseFolder();
void openFolder(const QString &path);
void refreshFolder();
void openSidebarItem(QListWidgetItem *item);
void selectInSidebar(const QString &path);
QStringList scanFolder() const;
void setSourceModeEnabled(bool enabled);
void exportPdf();
void changeZoom(int direction);
void resetZoom();
void setWordWrapEnabled(bool enabled);
void applyThemeMode(int mode);
void applyLanguage(const QString &code);
void retranslateUi();
void showAbout();
void updateStatusBar();
void updateWindowTitle();
void updateEditActionStates();
QString displayName() const;
QString startDirectory() const;
MarkdownEditor *m_editor = nullptr;
QLabel *m_statusLabel = nullptr;
QDockWidget *m_sidebar = nullptr;
QListWidget *m_fileList = nullptr;
QLabel *m_folderLabel = nullptr;
QToolButton *m_sourceButton = nullptr;
QToolButton *m_sidebarButton = nullptr;
QTimer *m_folderRefreshTimer = nullptr;
QString m_folderPath;
QString m_displayedFolder;
QString m_currentPath;
Eol m_eol = Eol::Lf;
bool m_hasBom = false;
QStringList m_recentFiles;
QString m_lastDirectory;
QAction *m_newAction = nullptr;
QAction *m_openAction = nullptr;
QAction *m_saveAction = nullptr;
QAction *m_saveAsAction = nullptr;
QAction *m_exportPdfAction = nullptr;
QAction *m_quitAction = nullptr;
QAction *m_undoAction = nullptr;
QAction *m_redoAction = nullptr;
QAction *m_cutAction = nullptr;
QAction *m_copyAction = nullptr;
QAction *m_pasteAction = nullptr;
QAction *m_selectAllAction = nullptr;
QAction *m_wrapAction = nullptr;
QAction *m_zoomInAction = nullptr;
QAction *m_zoomOutAction = nullptr;
QAction *m_zoomResetAction = nullptr;
QAction *m_themeSystemAction = nullptr;
QAction *m_themeLightAction = nullptr;
QAction *m_themeDarkAction = nullptr;
QAction *m_themeScheduleAction = nullptr;
QAction *m_openFolderAction = nullptr;
QAction *m_sidebarAction = nullptr;
QAction *m_sourceModeAction = nullptr;
QAction *m_codeBlockAction = nullptr;
QAction *m_headingActions[6] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
QMenu *m_recentMenu = nullptr;
QMenu *m_fileMenu = nullptr;
QMenu *m_editMenu = nullptr;
QMenu *m_viewMenu = nullptr;
QMenu *m_formatMenu = nullptr;
QMenu *m_helpMenu = nullptr;
QMenu *m_themeMenu = nullptr;
QMenu *m_headingMenu = nullptr;
QMenu *m_languageMenu = nullptr;
QAction *m_aboutAction = nullptr;
QAction *m_languageChineseAction = nullptr;
QAction *m_languageEnglishAction = nullptr;
QString m_welcomeText;
};