Qt QPushButton添加图标后悬停时图标与边框存在间隙如何解决
问题描述
我在构造函数中为窗体和按钮设置了如下样式:
{ ui->setupUi(this); this->setStyleSheet("QWidget {background: rgb(49, 54, 59); color: rgb(220, 221, 218); selection-color: lightyellow; selection-background-color: darkcyan;}" "QPushButton::hover {color: darkcyan; border: 2px solid grey; border-radius: 3px};"); }
之后我在按钮的icon属性中通过资源文件添加了图标,通过iconSize参数将图标尺寸设置为20x20,同时将按钮的flat参数设置为True。
鼠标悬停在按钮上的效果如下:
按钮自身尺寸由布局决定,为32x26,图标尺寸为20x20。请问如何消除图标与按钮边框之间的间隙?我尝试过将按钮尺寸静态设置为22x22,效果尚可,但我不想采用这种方案,谢谢解答。
解决方案
你遇到的间隙是QPushButton默认自带的内边距导致的,可通过以下几种方案解决,无需固定按钮尺寸:
- 通过样式表清除默认内边距(优先推荐)
在你现有的样式表中新增QPushButton基础样式规则,直接清除默认留白,还可统一定义图标尺寸:
this->setStyleSheet( /* 原有QWidget全局样式规则保留 */ "QPushButton {" " padding: 0px;" /* 核心:清除默认内边距 */ " qproperty-iconSize: 20px 20px;" /* 可直接在QSS中统一定义图标尺寸,无需单独在属性中设置 */ "}" "QPushButton::hover {color: darkcyan; border: 2px solid grey; border-radius: 3px};" );
- 代码设置按钮内容边距
如果样式表修改后仍有残留间隙,可在构造函数中对目标按钮调用内容边距设置接口:
ui->你的按钮对象名->setContentsMargins(0, 0, 0, 0);
- 检查布局边距配置
如果上述操作完成后仍有间隙,检查按钮所在布局的spacing参数,以及按钮自身的layoutMargin属性,将对应数值调整到你需要的大小即可。
以上方案均适配布局动态分配的按钮尺寸,无需硬编码按钮宽高,适配不同分辨率和窗口缩放场景。
内容的提问来源于stack exchange,提问作者Alex Rebell
相关产品推荐
相关产品推荐

