0

我正在尝试使用图像作为 QLabel 上的工具提示。我遵循此处描述的方法:在 QToolTip 中使用图片或图像

但是我在该图像周围获得了一个自动边距,我想将其删除。通过使样式表中的边框明显,并设置工具提示背景颜色,我们可以检查附加边距是否不是图像的一部分,而是在边框内。然而,在“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();
}

这是我从中得到的:在此处输入图像描述

图像是正确的。边框跟随样式表,但我不知道那个红色区域来自哪里。如何摆脱这个“边缘”?这是 QTooltip 错误吗?

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

编辑:我在窗户上。图片大小为 482x482 像素。我让某人在 Linux 上尝试过,并且不需要的余量也在那里,但要小得多。

4

1 回答 1

1

QToolTip造型很时髦。它实际上是一个QLabel但随后尝试从其父小部件继承 CSS ......但也设置了一些硬编码的样式属性,如边距和缩进。而且那个错误并没有被修复,至少不是一直都是。

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

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

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

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

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

但是在这里我们可以看到那个错误(或类似的错误)——在最初的显示中,图像周围有红色的填充,但是一旦鼠标移动,它就会正确地重新缩放,没有更多的填充。

我得到的最好结果是使用 CSS background-image 属性,但你需要知道图像大小才能工作。

QToolTip { 
  background-image: url(test.png); 
  min-width: 461px; 
  min-height: 469px; 
  border: 2px solid green;
}
于 2019-11-05T11:59:37.817 回答