Skip to content

SystemTrayIcon 设置 icon.name 无效 #212

Description

@rb-union

SUMMARY | 问题概要

SystemTrayIcon 设置 icon.name 图标查找失败,显示为齿轮图标。
/qquicklabsplatformiconloader.cpp#L35 未查找到图标。

QIcon QQuickLabsPlatformIconLoader::toQIcon() const
{
    QIcon fallback = QPixmap::fromImage(image());
    QIcon icon = QIcon::fromTheme(m_icon.name(), fallback);
    icon.setIsMask(m_icon.isMask());
    return icon;
}

icon的查找中 availableSizes() 为空则直接使用 fallback (qicon.cpp#L1415

QIcon QIcon::fromTheme(const QString &name, const QIcon &fallback)
{
    QIcon icon = fromTheme(name);

    if (icon.isNull() || icon.availableSizes().isEmpty())
        return fallback;

    return icon;
}

和 dtkgui 这笔提交 chore: add proxyiconengine 有关,后续的 svg 图片默认 IconEngine 变成了 DDciIconEngine;
这笔提交处理了部分问题 fix: wrong availableSizes for DIconProxyEngine, 但 DDciIconEngine 没有处理 availableSizes()

DTK and OS VERSIONS | DTK&系统版本信息

Distribution: deepin V23
Package:

  • dde-qt6introduction: 6.0.24
  • libdtk6gui: 6.0.24

Minimal Reproducible Case Code | 最小复现案例代码

  1. 使用 SystemTrayIcon 组件
SystemTrayIcon {
    icon.name: "dde-file-manager"
}
  1. 在 Qt6 对 QIcon 单独测试
    qWarning() << "Icon exist: " << QIcon::fromTheme("dde-file-manager");
    qWarning() << "Icon is null: " << QIcon::fromTheme("dde-file-manager", QIcon());

OBSERVED RESULT | 观察到的结果

  1. 托盘显示齿轮图标,无对应的图标。

  2. 输出如下,查找到的图标中 availableSizes 也为空。

Icon exist:  QIcon("dde-file-manager",availableSizes[normal,Off]=QList(),cacheKey=0x200000000)
Icon is null:  QIcon(null)

EXPECTED RESULT | 期望的结果

图标显示和查找正常。

ADDITIONAL INFORMATION | 额外补充

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions