目录
【问题】
在业务开发场景中发现,通过qss属性"icon"无法更改QLineEdit中图标按钮的大小、间距等式样。
此外,QLineEdit控件类也没有提供任何设置图标按钮大小、间距的接口!
示意图如下:
【源码分析】
源码文件名:
qlineedit_p.cpp
源码路径:
Src\qtbase\src\widgets\widgets
关键代码:
QLineEditPrivate::SideWidgetParameters QLineEditPrivate::sideWidgetParameters() const
{
Q_Q(const QLineEdit);
SideWidgetParameters result;
result.iconSize = q->style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, q);
result.margin = result.iconSize / 4;
result.widgetWidth = result.iconSize + 6;
result.widgetHeight = result.iconSize + 2;
return result;
}
【源码解读】
根据以上QLineEditPrivate::sideWidgetParameters()函数内容, 我们可以得出以下结论:
- QLineEdit的图标按钮由风格类型:QStyle::PM_SmallIconSize的尺寸信息决定!
- QLineEdit的图标按钮宽高分别为:iconSize + 6, iconSize+2; margin尺寸为:iconSize /4。
【解决方案】
- 通过继承 QCommonStyle类,重写虚接口pixelMetric,来改变PM_SmallIconSize的尺寸值
- 借助UI, 修改原图标资源文件,增加一些边缘透明像素,来实现图标按钮的margin间距效果