feat: 用 logo.png 作为程序图标并补齐打包资源
- 从 logo.png 生成 packaging/ 下的 ico / icns / 256px png - Qt 运行时窗口图标走 resources.qrc(不安装也有图标), 并以 setDesktopFileName 声明桌面文件名 - Linux 增加 voiletmark.desktop 与 make install 规则 (可执行文件 + desktop 条目 + hicolor 图标) - Windows 用 RC_ICONS 嵌入 exe 图标,macOS 用 ICON 设置 app bundle 图标 - 关于对话框显示 logo - 版本 0.3.1
This commit is contained in:
@@ -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
|
||||
```
|
||||
|
||||
## 下一版计划
|
||||
|
||||
+15
-1
@@ -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
|
||||
|
||||
@@ -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
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 264 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.6 KiB |
+13
-6
@@ -20,6 +20,7 @@
|
||||
#include <QMenu>
|
||||
#include <QMenuBar>
|
||||
#include <QMessageBox>
|
||||
#include <QPixmap>
|
||||
#include <QSaveFile>
|
||||
#include <QSettings>
|
||||
#include <QSignalBlocker>
|
||||
@@ -653,12 +654,18 @@ void MainWindow::applyThemeMode(int mode)
|
||||
|
||||
void MainWindow::showAbout()
|
||||
{
|
||||
QMessageBox::about(
|
||||
this, tr("关于 VoiletMark"),
|
||||
tr("<h3>VoiletMark %1</h3>"
|
||||
"<p>一个轻量的跨平台 Markdown 编辑器。</p>"
|
||||
"<p>基于 Qt %2 与 C++17 构建,界面会跟随系统自动切换浅色 / 深色主题。</p>")
|
||||
.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("<h3>VoiletMark %1</h3>"
|
||||
"<p>一个轻量的跨平台 Markdown 编辑器。</p>"
|
||||
"<p>基于 Qt %2 与 C++17 构建。</p>")
|
||||
.arg(QCoreApplication::applicationVersion(),
|
||||
QString::fromLatin1(qVersion())));
|
||||
box.setStandardButtons(QMessageBox::Ok);
|
||||
box.exec();
|
||||
}
|
||||
|
||||
void MainWindow::addRecentFile(const QString &path)
|
||||
|
||||
@@ -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"));
|
||||
|
||||
Reference in New Issue
Block a user