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 | 最小复现案例代码
- 使用 SystemTrayIcon 组件
SystemTrayIcon {
icon.name: "dde-file-manager"
}
- 在 Qt6 对 QIcon 单独测试
qWarning() << "Icon exist: " << QIcon::fromTheme("dde-file-manager");
qWarning() << "Icon is null: " << QIcon::fromTheme("dde-file-manager", QIcon());
OBSERVED RESULT | 观察到的结果
-
托盘显示齿轮图标,无对应的图标。
-
输出如下,查找到的图标中 availableSizes 也为空。
Icon exist: QIcon("dde-file-manager",availableSizes[normal,Off]=QList(),cacheKey=0x200000000)
Icon is null: QIcon(null)
EXPECTED RESULT | 期望的结果
图标显示和查找正常。
ADDITIONAL INFORMATION | 额外补充
No response
SUMMARY | 问题概要
SystemTrayIcon 设置 icon.name 图标查找失败,显示为齿轮图标。
见 /qquicklabsplatformiconloader.cpp#L35 未查找到图标。
icon的查找中 availableSizes() 为空则直接使用 fallback (qicon.cpp#L1415)
和 dtkgui 这笔提交 chore: add proxyiconengine 有关,后续的 svg 图片默认 IconEngine 变成了 DDciIconEngine;
这笔提交处理了部分问题 fix: wrong availableSizes for DIconProxyEngine, 但 DDciIconEngine 没有处理 availableSizes()
DTK and OS VERSIONS | DTK&系统版本信息
Distribution: deepin V23
Package:
Minimal Reproducible Case Code | 最小复现案例代码
OBSERVED RESULT | 观察到的结果
托盘显示齿轮图标,无对应的图标。
输出如下,查找到的图标中 availableSizes 也为空。
EXPECTED RESULT | 期望的结果
图标显示和查找正常。
ADDITIONAL INFORMATION | 额外补充
No response