在Qt中获取图像标签的实际边距

3

我的应用程序有一个自定义的QSS,我有一个带有图像的QLabel。图像有很大的边距,这些边距来自于样式。

这是标签的外观,QPixmap是纯红色的以显示实际内容,因此白色部分是边距:

enter image description here

边距为上下各11像素,左侧为7像素,右侧为45像素。我用图像编辑器测量了它们,并将边框计入边距。

我尝试了这些函数:

qDebug() << label->contentsMargins() << label->margin();

但输出结果为QMargins(0, 0, 0, 0) 0,即使存在(大)边距。我如何计算图像标签的实际边距?

1个回答

3

在研究QLabel::paintEvent()源代码后,终于成功找到了真正的边距。他们是这样做的:

QRect cr = label->contentsRect();
cr.adjust(label->margin(), label->margin(), -label->margin(), -label->margin());

编辑:

在我的情况下,标签似乎是从父样式表中获取其填充的,因此在显示之前调用 label->contentsMargins() 返回零。

也就是说,这段代码:

qDebug() << label->contentsMargins() << label->margin() << label->contentsRect();
label->show();
qDebug() << label->contentsMargins() << label->margin() << label->contentsRect();

生成如下输出:
QMargins(0, 0, 0, 0) 0 QRect(0,0 62x31) 
QMargins(7, 1, 7, 1) 0 QRect(7,1 36x31) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接