QIcon::actualSize的作用和用法
QIcon::actualSize
是 Qt 中用于获取图标实际渲染尺寸的关键方法,其核心作用和用法如下:
一、核心作用
- 动态尺寸适配
根据目标设备的显示特性(如高DPI屏幕)和控件状态,返回图标在当前上下文中的最佳渲染尺寸。 - 多分辨率支持
自动匹配系统中最接近请求尺寸的图标变体(如icon_32x32.png
和icon_64x64.png
)。 - 状态感知
结合图标的Mode
(如正常/禁用状态)和State
(如选中状态)返回对应尺寸。
二、参数与返回值
方法签名:
QIcon icon(":/icons/app.png");
QSize requestedSize(64, 64); // 请求64x64像素
QSize actualSize = icon.actualSize(requestedSize); // 可能返回48x48(若无匹配大图)
-
size
:请求的目标尺寸(逻辑像素),通常为控件尺寸79。 -
mode
:图标状态模式,可选:QIcon::Normal
(默认)QIcon::Disabled
QIcon::Active
QIcon::Selected
。
-
state
:图标状态(如QIcon::On
/Off
)。 - 返回值:实际渲染尺寸(
QSize
),可能小于请求尺寸(如缺少高分辨率图标)。
三、典型用法
1. 获取图标适配尺寸
QIcon icon(":/icons/app.png");
QSize requestedSize(64, 64); // 请求64x64像素
QSize actualSize = icon.actualSize(requestedSize); // 可能返回48x48(若无匹配大图)
2. 高DPI屏幕适配
// 结合devicePixelRatio调整
qreal dpr = widget->devicePixelRatio();
QSize physicalSize = icon.actualSize(QSize(32, 32)) * dpr;
3. 状态相关尺寸获取
// 获取禁用状态下的实际尺寸
QSize disabledSize = icon.actualSize(QSize(50, 50), QIcon::Disabled);
四、注意事项
- 与
scaled()
的区别actualSize
返回系统选择的实际尺寸,而scaled()
强制缩放图像。 - 空图标处理
若图标未加载有效图像,返回QSize(0, 0)
。 - 性能优化
频繁调用时建议缓存结果,避免重复计算。
五、应用场景
- 控件布局:在自定义绘制时精确计算图标占位空间。
- 响应式设计:根据实际尺寸动态调整界面元素。
- 主题兼容:适配不同系统主题下的图标尺寸差异。