如何使 QToolButton 中的图标居中?

Posted

技术标签:

【中文标题】如何使 QToolButton 中的图标居中?【英文标题】:How to center an icon in a QToolButton? 【发布时间】:2017-02-02 15:16:56 【问题描述】:

我创建了一个简单的 10x10 黑盒并将其添加到QToolButton,如下所示:

QIcon minIcon;
minIcon.addFile("c:/tmp/black10x10.png");
minButton = new QToolButton;
minButton->setIcon(minIcon);

但是,它出现在屏幕左移(为方便起见放大了图像):

Gimp 中的一些眯眼告诉我,左边的灰色区域放大了 56 像素,右边的灰色区域放大了 68 像素。即使没有缩放,这种错位也非常明显——这就是我最初发现它的原因。那么,如何让这个图标居中呢?

附:尝试使用不带文本的QPushButton。效果一样。

【问题讨论】:

这可能是为标签节省空间。您是否尝试过负左侧边距? 看起来好像您正在尝试将 10x10 图像居中在 25x25(ish) 矩形中。在这种情况下,总是会有半像素抖动。 @Nicolas Holthaus minButton->setContentsMargins() 无论我使用什么参数,似乎都没有任何效果。此外,这将是硬编码,我必须在每个平台和版本上进行测试。 @G.M.建议我应该测试的尺寸,然后?最初我使用的是QApplication::style()->standardIcon(QStyle::SP_TitleBarMinButton),是的,它关闭了。 我没有尝试对按钮内的图标位置产生任何影响。我唯一剩下的建议是继承 QToolButton 并覆盖它的“paint”方法并自己控制图标绘制,以便您可以调整它以使其正确居中。我也注意到了这种影响,但我没有尝试对此做任何事情。如果你自己写paint,我想你不会使用setIcon方法,而是调用QToolButton::paint,然后自己在想要的位置绘制图标。如果您使用 setIcon,则基本方法将绘制它,这是您不想要的。 【参考方案1】:

现在可能有点晚了,但我偶然发现了同样的问题,并在 QTs qstylesheet.cpp

中找到了以下代码 sn-p
case CT_ToolButton:
        if (rule.hasBox() || !rule.hasNativeBorder() || !rule.baseStyleCanDraw())
            sz += QSize(3, 3); // ### broken QToolButton

这会将偶数大小的图标增加到奇数大小,因此不会居中。我不确定为什么要添加 3,但评论表明这是对某些问题的修复... 不幸的是,这并不能解决问题,它只是解释了它的来源。但它可能会帮助某人找到比“让所有图标都变大”更好的解决方案。

【讨论】:

以上是关于如何使 QToolButton 中的图标居中?的主要内容,如果未能解决你的问题,请参考以下文章

QT学习之如何在QToolBar中添加带图标的QToolButton并设置图标大小

PyQt5 之QToolButton工具按钮

PyQt5 之QToolButton工具按钮

如何在 Qt5 中的 QToolButton 上设置 GIF 图像

修复 QToolButton 图标

QToolButton 文本和图标之间的空间