在 QToolTip 中设置图像时删除边距

Remove margin when setting an image in a QToolTip

我正在尝试将图像用作 QLabel 上的工具提示。我正在按照此处描述的方法进行操作:

但是我在该图像周围自动获得了边距,我想将其删除。通过在样式表中使边框明显,并设置工具提示背景颜色,我们可以检查额外的边距不是图像的一部分,而是在边框内。然而,明确地将填充设置为“0px”也不会删除它。

这是一个最小的例子:

#include "qapplication.h"
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QLabel hello("Hello world!", 0) ;
    hello.resize(200, 100);

    hello.setStyleSheet("QToolTip { padding: 0px; border: 2px solid green; background: red;}");

    QString html = QString("<img src='test.png'>");
    hello.setToolTip(html);

    hello.show();
    return a.exec();
}

这是我从中得到的:

图像正确。边框遵循样式表,但我不知道那个红色区域是从哪里来的。如何摆脱这个"margin"? 这是 QTooltip 错误吗?

有点像此处描述的错误,但我使用的是Qt5.12.5,应该可以解决:https://bugreports.qt.io/browse/QTBUG-59119

编辑:我在 windows。图片大小为 482x482px。我让某人在 Linux 上试了一下,不需要的边距也在那里,但要小得多。

QToolTip 样式很时髦。它实际上是一个 QLabel 但随后尝试从其父窗口小部件继承 CSS ......而且还设置了一些硬编码的样式属性,如边距和缩进。而且那个 bug 还没有修复,至少没有完全修复。

关于您的图像,我能做的最好的事情是将 qproperty-marginqproperty-indent 设置为零(这会设置用于显示工具提示的 QLabel 上的属性):

QToolTip { 
  qproperty-margin: 0; 
  qproperty-indent: 0; 
  border: 2px solid green; 
  background: red; 
}

这仍然会在两侧留下小的红色边距。我认为部分问题是图像缩放...我尝试使用不同的图像,它似乎覆盖了整个区域。此外,如果您在 QApplication 上设置 CSS(而不是您示例中的 QLabel 实例),则填充会再次发生一些变化。

另一个技巧是在工具提示标签上设置像素图 属性(而不是使用 HTML img 标签):

QToolTip { 
  qproperty-pixmap: url(test.png);
  qproperty-margin: 0; 
  qproperty-indent: 0; 
  border: 2px solid green; 
  background: red; 
}

但在这里我们可以看到该错误(或类似错误)——在初始显示时,图像周围有红色填充,但一旦移动鼠标,它就会重新正确缩放,不再有填充。

我得到的最好结果是使用 CSS 背景图像 属性,但您需要知道图像大小才能起作用。

QToolTip { 
  background-image: url(test.png); 
  min-width: 461px; 
  min-height: 469px; 
  border: 2px solid green;
}