優秀的跨平台應用不僅「能跑」,更要「像原生」。Qt 提供了大量平台相關的高級 API,本文匯總六個實用技巧,讓你的桌面程序在 Windows/macOS/Linux 上都貼合用戶習慣。
文本編輯器常見需求:內容變更時標題顯示 *,提示保存。
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
setWindowTitle("untitled [*]"); // [*] 為佔位符
connect(ui->textEdit->document(),
&QTextDocument::modificationChanged,
this, &QWidget::setWindowModified); // 自動管理 [*] 顯示/隱藏
}

setWindowTitle 中的 [*] 會被 windowModified 屬性自動替換為 *(Windows/Linux)或保持隱藏(macOS 原生不顯示 *,但文檔圖標會變暗)。QApplication::alert()單實例應用場景:二次啟動時喚醒主窗口並提醒用戶。
// 任意位置調用
QApplication::alert(mainWindow, 0); // 0 表示持續閃爍直到用戶激活窗口

NSApplicationActivationPolicyRegular)。QSystemTrayIcon後台常駐、最小化到托盤、右鍵菜單、氣球提示。
QSystemTrayIcon *tray = new QSystemTrayIcon(this);
tray->setIcon(QIcon(":/icons/app.png"));
tray->setToolTip("MyApp 運行中");
// 右鍵菜單
QMenu *menu = new QMenu;
menu->addAction("顯示主窗口", this, &MainWindow::showNormal);
menu->addAction("退出", qApp, &QApplication::quit);
tray->setContextMenu(menu);
tray->show();
// 氣球提示(Windows/Linux)
tray->showMessage("標題", "內容", QSystemTrayIcon::Information, 3000);

macOS 關鍵點:托盤圖標**必須是純黑白兩色**(Alpha 通道),否則顯示為方塊。建議準備專用 tray_icon_macos.pdf(矢量)或單色 PNG。
QStandardPaths (Qt 5+)舊版 QDesktopServices::storageLocation 已棄用,現用 QStandardPaths:
QString docs = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
QString music = QStandardPaths::writableLocation(QStandardPaths::MusicLocation);
QString cache = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
QString config = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); // 含組織/應用名
Documents、macOS ~/Documents、Linux ~/Documents (xdg-user-dirs)。AppConfigLocation 會自動創建 組織名/應用名 子目錄,適合存配置文件。QDesktopServices::openUrl()
// 網頁
QDesktopServices::openUrl(QUrl("https://example.com"));
// 郵件
QDesktopServices::openUrl(QUrl("mailto:user@example.com?subject=Hello"));
// 本地文件
QDesktopServices::openUrl(QUrl::fromLocalFile("/path/to/file.pdf"));
// 目錄
QDesktopServices::openUrl(QUrl::fromLocalFile("/home/user/Downloads"));
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling) (Qt 5.6+) / AA_UseHighDpiPixmaps,配合 qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1")。QFileDialog、QColorDialog、QFontDialog 默認即使用原生對話框(Windows/macOS),Linux 視桌面環境而定。強制非原生用 QFileDialog::DontUseNativeDialog。「知其然」更要「知其所以然」。上述 API 皆為 Qt 封裝平台原生行為,調用成本極低、收益極高。將這些細節融入開發習慣,你的 Qt 應用將在各平台上都展現出專業的原生質感。