如何获取小部件的当前填充?

时间:2019-09-22 23:17:44

标签: c++ qt c++11 qt5 qwidget

我知道如何调整小部件的padding属性:

widget.setStyleSheet("padding: 5px 5px 5px 5px");

widget.setStyleSheet("padding: 5px");

在所有边上都进行相同的填充。

但是如何获得当前的填充?我找不到通往qDebug() << padding的方法。

如果用例很重要,那么我有一个带有三个组合框的垂直布局,已经将布局内容的边距设置为零,并且组件周围的空间消失了。但是组合框之间仍然有一些垂直空间。

QWidget *widget = new QWidget;
QVBoxLayout *vLayout = new QVBoxLayout(widget);
vLayout->setContentsMargins(0,0,0,0);

vLayout->addWidget(new QComboBox);
vLayout->addWidget(new QComboBox);
vLayout->addWidget(new QComboBox);

QToolBar *toolbar = new QToolBar;
toolbar->addWidget(widget);
addToolBar(toolbar);

enter image description here

通过在布局中设置垂直空间,我得到:

enter image description here

参考:https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcombobox

1 个答案:

答案 0 :(得分:0)

设置样式表不会以您可以查询的任何方式更改实际边距。活动的QStyle可以控制小部件的最终外观,在这种情况下为QStylesheetStyle,它可以在绘制项目时设置边距/等。除了QStylesheetStyle内部,其他地方都无法使用已解析的CSS。

添加(基于后续评论)

没有官方的访问QStylesheetStyle的方法,它在Qt中是完全私有的。但是,即使您确实想使用widgets-private部分,该信息仍然埋在QStylesheetStyle私有数据的深处...我不确定即使您加载了{{ 1}},因为很多数据(以及提取部分数据的方法)仅在CPP文件本身中。

如果您真的想深入研究... https://code.woboq.org/qt5/qtbase/src/widgets/styles/qstylesheetstyle.cpp.html(您可以立即看到CPP中有一些定义,这些定义对于处理CSS和进行任何查找都是必需的,例如qstylesheetstyle_p.h顶部的枚举)

已添加以回应已编辑的问题:

这是默认的PseudoElement间距,增加了额外的填充。添加:

QVBoxLayout(或您希望在项目之间使用的任何填充)

enter image description here