如何在QWidget中删除不需要的平台相关填充?

时间:2016-11-16 13:56:38

标签: c++ qt padding

根据平台(KDE Plasma或Ubuntu 16.04),小部件中的填充不同。这张图片证明了这一点:

Demo on Kubuntu 16.04 (left) and Ubuntu 16.04 (right)

打印值是qlabel->geometry()的输出。使用Gammaray检查显示KDE的sizeHint()为77x18,但实际大小为77x33。显然有一些特定于平台的样式,但是如何以正确的方式禁用它? (调用setWidth()或类似的东西是不可能的,因为它无法正确处理所有内容。)

此窗口小部件不存在layoutSpacing()方法,并且根据建议here调用setMargins(0)无效。我想可以减去其中一个QStyle PixelMetrics值,但究竟是哪一个? (有没有关于此的文件?)

这是我能想到的最低工作范例。原始问题有一个QTreeView,在单元格之间存在太多空间,但我想这个解决方案是可传递的。

#include <QApplication>
#include <QLabel>
#include <QDebug>
#include <QTimer>

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    QLabel *label = new QLabel("Hello, world!");
    QTimer::singleShot(100, [=]() {
        qDebug() << label->geometry();
    });
    label->show();
    return app.exec();
}

0 个答案:

没有答案