diff --git a/README.md b/README.md index d5573dc..feaf49c 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,28 @@ make -j"$(nproc)" 脚本会依次查找 `command -v qmake`、`$QT_PREFIX/bin/qmake`、 `$HOME/Qt5/5.15.2/gcc_64/bin/qmake`;也可以用 `QMAKE=/path/to/qmake` 直接指定。 +## 安装(Linux) + +```bash +make -C build install # 默认装到 /usr/local +make -C build install INSTALL_ROOT=/tmp/pkg # 打包用,装到 /tmp/pkg/usr/local +``` + +会一起装上可执行文件、`voiletmark.desktop` 和 256×256 图标, +装完就能在应用菜单里搜到 VoiletMark。 + +## 图标 + +`logo.png` 是源文件,`packaging/` 里是从它生成的各平台图标: + +| 文件 | 平台 | +| --- | --- | +| `voiletmark.ico` | Windows 可执行文件图标(`RC_ICONS`) | +| `voiletmark.icns` | macOS 应用包图标(`ICON`) | +| `voiletmark.png` | Linux 桌面图标(hicolor 256×256) | + +运行时的窗口图标直接嵌在资源里(`resources.qrc`),所以不安装也有图标。 + ## 命令行 ```bash @@ -137,7 +159,11 @@ src/ ├── ThemeManager.{h,cpp} 四种主题模式 + 系统检测 + 调色板 / QSS 生成 ├── MainWindow.{h,cpp} 菜单、文件读写、文件夹侧栏、状态栏、设置 ├── MarkdownEditor.{h,cpp} 编辑器控件:行号、缩进、标题 / 代码块命令、源码模式 -└── MarkdownHighlighter.{h,cpp} Markdown 语法着色(含围栏代码块状态机) +└── MarkdownHighlighter.{h,cpp} Markdown 着色与就地渲染(隐藏标记、标题缩放) + +logo.png 图标源文件 +resources.qrc 窗口图标资源 +packaging/ 各平台图标(ico / icns / png)与 .desktop ``` ## 下一版计划 diff --git a/VoiletMark.pro b/VoiletMark.pro index efb8c0d..b4dd860 100644 --- a/VoiletMark.pro +++ b/VoiletMark.pro @@ -1,6 +1,6 @@ TEMPLATE = app TARGET = VoiletMark -VERSION = 0.3.0 +VERSION = 0.3.1 QT += core gui widgets @@ -13,6 +13,10 @@ INCLUDEPATH += $$PWD/src RESOURCES += resources.qrc +# 各平台的可执行文件图标 +win32: RC_ICONS = packaging/voiletmark.ico +macx: ICON = packaging/voiletmark.icns + SOURCES += \ src/main.cpp \ src/MainWindow.cpp \ @@ -25,3 +29,13 @@ HEADERS += \ src/MarkdownEditor.h \ src/MarkdownHighlighter.h \ src/ThemeManager.h + +# Linux 桌面集成:make install 之后能在应用菜单里找到 +isEmpty(PREFIX): PREFIX = /usr/local + +target.path = $$PREFIX/bin +desktop.files = packaging/voiletmark.desktop +desktop.path = $$PREFIX/share/applications +icon.files = packaging/voiletmark.png +icon.path = $$PREFIX/share/icons/hicolor/256x256/apps +INSTALLS += target desktop icon diff --git a/packaging/voiletmark.desktop b/packaging/voiletmark.desktop new file mode 100644 index 0000000..0c788bb --- /dev/null +++ b/packaging/voiletmark.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Type=Application +Version=1.0 +Name=VoiletMark +GenericName=Markdown Editor +GenericName[zh_CN]=Markdown 编辑器 +Comment=Lightweight cross-platform Markdown editor +Comment[zh_CN]=轻量的跨平台 Markdown 编辑器 +Exec=VoiletMark %F +Icon=voiletmark +Terminal=false +Categories=Utility;TextEditor;Office; +Keywords=markdown;editor;notes; +Keywords[zh_CN]=markdown;编辑器;笔记; +MimeType=text/markdown; +StartupNotify=true +StartupWMClass=VoiletMark diff --git a/packaging/voiletmark.icns b/packaging/voiletmark.icns new file mode 100644 index 0000000..9ee87c3 Binary files /dev/null and b/packaging/voiletmark.icns differ diff --git a/packaging/voiletmark.ico b/packaging/voiletmark.ico new file mode 100644 index 0000000..b5eff53 Binary files /dev/null and b/packaging/voiletmark.ico differ diff --git a/packaging/voiletmark.png b/packaging/voiletmark.png new file mode 100644 index 0000000..099c01f Binary files /dev/null and b/packaging/voiletmark.png differ diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index ff0b30b..39eadcc 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -653,12 +654,18 @@ void MainWindow::applyThemeMode(int mode) void MainWindow::showAbout() { - QMessageBox::about( - this, tr("关于 VoiletMark"), - tr("

VoiletMark %1

" - "

一个轻量的跨平台 Markdown 编辑器。

" - "

基于 Qt %2 与 C++17 构建,界面会跟随系统自动切换浅色 / 深色主题。

") - .arg(QCoreApplication::applicationVersion(), QString::fromLatin1(qVersion()))); + QMessageBox box(this); + box.setWindowTitle(tr("关于 VoiletMark")); + box.setIconPixmap(QPixmap(QStringLiteral(":/logo.png")) + .scaled(72, 72, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + box.setTextFormat(Qt::RichText); + box.setText(tr("

VoiletMark %1

" + "

一个轻量的跨平台 Markdown 编辑器。

" + "

基于 Qt %2 与 C++17 构建。

") + .arg(QCoreApplication::applicationVersion(), + QString::fromLatin1(qVersion()))); + box.setStandardButtons(QMessageBox::Ok); + box.exec(); } void MainWindow::addRecentFile(const QString &path) diff --git a/src/main.cpp b/src/main.cpp index 3f2fa73..6858089 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,6 +17,7 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); QApplication::setStyle(QStyleFactory::create(QStringLiteral("Fusion"))); QApplication::setWindowIcon(QIcon(QStringLiteral(":/logo.png"))); + QGuiApplication::setDesktopFileName(QStringLiteral("voiletmark")); QCoreApplication::setOrganizationName(QStringLiteral("VoiletMark")); QCoreApplication::setApplicationName(QStringLiteral("VoiletMark"));