deepin-dde-expert

star 6

Use when developing Deepin/UOS desktop applications with DTK widgets, GVfs file operations, DBus system integration, or Polkit authentication. Qt6/Qt5 dual support.

re2zero By re2zero schedule Updated 3/12/2026

name: deepin-dde-expert description: Use when developing Deepin/UOS desktop applications with DTK widgets, GVfs file operations, DBus system integration, or Polkit authentication. Qt6/Qt5 dual support.

Deepin/UOS DDE Desktop Application Development Expert

Overview

Deepin/UOS 系统级开发专家,精通 DTK、GVfs、DBus、Polkit,开发符合 DDE 规范的应用。

核心原则:

  • DTK 优先于 Qt 原生
  • GIO 优先于 QFile(网络协议)
  • DBus 事件驱动优先于轮询
  • Polkit 鉴权优先于 sudo
  • Qt6 优先,V20 回退到 Qt5

When to Use

使用当:

  • DTK 控件(DMainWindow、DDialog、DMessageBox)
  • GVfs 网络协议(smb://、mtp://、dav://)
  • DDE DBus 服务集成
  • Polkit 权限控制
  • DDE 主题适配

不要用: 通用 Qt 应用、命令行工具、服务端开发

Decision Table

场景 决策 参考文档
显示主窗口 DMainWindow 而非 QMainWindow DTK Widgets
访问 smb:// 路径 GIO GFile 而非 QFile GVfs/GIO
获取电池/网络状态 DBus 信号监听而非轮询 DBus
修改 /etc 配置 Polkit + Helper 而非 sudo Polkit
深色/浅色主题适配 applicationPalette() 而非硬编码 DTK Widgets
大文件 I/O QtConcurrent 后台线程 GVfs/GIO

Core Rules

Rule 1: DTK Widgets (MANDATORY)

Use Forbidden
DMainWindow QMainWindow
DDialog QDialog
DMessageBox QMessageBox
DWidget QWidget
// ✅ CORRECT
#include <DMainWindow>
#include <DMessageBox>
DWIDGET_USE_NAMESPACE

DMainWindow *window = new DMainWindow();
DMessageBox::information(this, "Title", "Message");

// ❌ FORBIDDEN
QMainWindow *window = new QMainWindow();

Theme: Use DGuiApplicationHelper::instance()->applicationPalette(), never hardcode colors.

📖 详情: reference/dtk-widgets-guide.md

Rule 2: GVfs/GIO for Network Protocols

// ✅ CORRECT: smb://, mtp://, dav://
#include <gio/gio.h>
GFile *file = g_file_new_for_uri("smb://server/share/file.pdf");
GFileInputStream *input = g_file_read(file, nullptr, &error);

// ❌ FORBIDDEN
QFile file("smb://server/share/file.pdf"); // Fails

Async I/O: Always use QtConcurrent::run() for file operations.

📖 详情: reference/gvfs-gio-integration.md

Rule 3: DBus Event-Driven

// ✅ CORRECT: Listen to signals
QDBusConnection::systemBus().connect(
    "org.freedesktop.UPower",
    "/org/freedesktop/UPower",
    "org.freedesktop.DBus.Properties",
    "PropertiesChanged",
    this, SLOT(handleEvent(QString, QVariantMap)));

// ❌ FORBIDDEN: Polling
QTimer *timer = new QTimer();
connect(timer, &QTimer::timeout, this, [](){
    QFile::read("/sys/class/power_supply/BAT0/capacity");
});

📖 详情: reference/dbus-service-usage.md

Rule 4: Polkit Authentication

// ✅ CORRECT
PolkitQt1::Authority::instance()->checkAuthorizationSync(
    "org.deepin.dde.policy.authentication",
    PolkitQt1::UnixProcessSubject(QCoreApplication::applicationPid()),
    PolkitQt1::Authority::AllowUserInteraction);

// ❌ FORBIDDEN
sudo ./application  // Security risk

📖 详情: reference/polkit-auth-workflow.md

CMake Configuration

See qt-compatibility-build skill for complete Qt6/Qt5 dual support.

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
if(QT_VERSION_MAJOR EQUAL 6)
    set(DTK_VERSION_MAJOR 6)
else()
    set(DTK_VERSION_MAJOR "")
endif()

find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui Widgets)
find_package(Dtk${DTK_VERSION_MAJOR}Widget REQUIRED)

target_link_libraries(app PRIVATE
    Qt${QT_VERSION_MAJOR}::Widgets
    Dtk${DTK_VERSION_MAJOR}::Widget
)

Debian Control Files

See qt-compatibility-build skill for file convention.

File Deepin Qt
debian/control V25 Qt6
debian/control.1 V20 Qt5

Dependencies (V25/Qt6):

Build-Depends:
 qt6-base-dev | qtbase5-dev,
 libdtk6widget-dev | libdtkwidget-dev,
 libpolkit-qt6-1-dev | libpolkit-qt5-1-dev

Gotchas (常见陷阱)

陷阱 后果 修复
GVfs 挂载点 /run/user/UID/gvfs/ 路径随会话变化 → 使用 GIO URI API
DBus 总线类型错误 连接失败 → System vs Session
Polkit helper 未验证输入 命令注入风险 → 严格验证路径
非主线程更新 UI 崩溃 → 信号槽 (QueuedConnection)
忽略 GError 无法诊断问题 → 检查 error 参数

Code Review Checklist

📖 完整清单: reference/code-review-checklist.md

快速检查:

# 检查 DTK 控件使用
grep -r "QMainWindow\|QDialog\|QMessageBox" src/

# 检查硬编码颜色
grep -rE "#[0-9a-fA-F]{6}" src/

# 检查 GIO 使用
grep -r "g_file_new_for_uri" src/

Related Skills

  • qt-compatibility-build: Qt6/Qt5 dual support, CMake configuration, debian/control convention

Reference Documents

Install via CLI
npx skills add https://github.com/re2zero/deepin-skills --skill deepin-dde-expert
Repository Details
star Stars 6
call_split Forks 3
navigation Branch main
article Path SKILL.md
More from Creator