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

C++ 如何获取小部件的当前填充?,c++,qt,c++11,qt5,qwidget,C++,Qt,C++11,Qt5,Qwidget,我知道如何调整小部件的padding属性: widget.setStyleSheet("padding: 5px 5px 5px 5px"); 或 它在所有方面都有相同的填充 但如何获得当前的填充?我看不到一种方法来设置样式表不会以任何您可以查询的方式更改实际边距。活动的QStyle控制小部件的最终外观,在本例中为QStylesheetStyle,并在绘制项目时设置边距/etc。除了QStylesheetStyle内部,解析后的CSS在其他任何地方都不可用 根据后续评论添加: 没有正式的方式访

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

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

它在所有方面都有相同的填充


但如何获得当前的填充?我看不到一种方法来设置样式表不会以任何您可以查询的方式更改实际边距。活动的
QStyle
控制小部件的最终外观,在本例中为
QStylesheetStyle
,并在绘制项目时设置边距/etc。除了
QStylesheetStyle
内部,解析后的CSS在其他任何地方都不可用

根据后续评论添加:

没有正式的方式访问
QStylesheetStyle
,它在Qt中是完全私有的。但是,即使您真的想使用
widgets private
部分,信息仍然深深地埋藏在
QStylesheetStyle
私有数据中。。。即使加载
qstylesheetstyle_p.h
,我也不确定您是否可以访问它,因为许多数据(以及提取部分数据的方法)都位于CPP文件本身

如果你真的想把它挖出来。。。(您可以立即看到CPP中有一些处理CSS和执行任何查找所需的定义,如顶部的
PseudoElement
enum)

在回答编辑后的问题时添加:

它是默认的
QVBoxLayout
间距,用于添加额外的填充。加:

vLayout->setspace(0)(或项目之间需要的任何填充)


您是否需要专门用于组合框?如果我没记错的话,在“展开”时,填充将应用于项目。对于一些小部件,contentsMargins返回您想要的内容,但是如果小部件在填充上方有更多的边距(从子项/布局/框架),则不会返回您想要的内容。问题更新了一些用例描述。您的意思是说(在您的补充中)问题是当你隐藏组合时?不清楚你的意思。如果您试图隐藏小部件并删除它们之间的布局间距,那么您需要更加聪明(这是一个PITA),或者只是从布局中删除小部件,隐藏它们,然后重新插入布局以再次显示它们。您也可以使用QSS规则来定位小部件的可见状态:
QComboBox{padding:5px;}QComboBox:hidden{padding:0;}
问题,用一些代码和图像更新。那么查询
QStylesheetStyle
呢?@KcFnMi为我的答案添加了进一步的解释。TL;医生:不可能。
widget.setStyleSheet("padding: 5px");
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);