【问题标题】:How to get current padding of a widget?如何获取小部件的当前填充?
【发布时间】:2020-01-23 00:41:23
【问题描述】:

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

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);

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

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

【问题讨论】:

  • 您是否需要专门用于组合框?当“扩展”时,填充适用于项目(如果我没记错的话)。
  • 对于某些小部件 contentsMargins 返回您想要的,但如果小部件在填充顶部有更多边距(来自子/布局/框架),则不会返回你想要什么。
  • 问题更新了一些用例的描述。
  • 您的意思是说(在您的补充中)问题出在您隐藏连击的时候吗?不清楚你的意思。如果您试图隐藏小部件并删除它们之间的布局间距,您需要变得更聪明(这是一个 PITA)或者只是从布局中删除小部件,隐藏它们,然后重新插入布局以再次显示它们。您还可以使用 QSS 规则来定位小部件的可见状态:QComboBox { padding: 5px; } QComboBox:hidden { padding: 0; }
  • 问题更新了一些代码和图像。

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


【解决方案1】:

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

添加基于后续评论:

没有访问QStylesheetStyle 的官方方法,它在Qt 中是完全私有的。但即使你真的想使用widgets-private 部分,这些信息仍然深藏在QStylesheetStyle 私有数据中......我不确定即使你加载了qstylesheetstyle_p.h,你也能得到它,因为很多数据(以及提取部分数据的方法)仅在 CPP 文件本身中。

如果您真的想深入了解它...https://code.woboq.org/qt5/qtbase/src/widgets/styles/qstylesheetstyle.cpp.html(您可以立即看到 CPP 中有处理 CSS 和进行任何查找所需的定义,例如顶部的 PseudoElement 枚举)

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

这是默认的QVBoxLayout 间距添加额外的填充。添加:

vLayout->setSpacing(0);(或您想要的项目之间的任何填充)

【讨论】:

  • 那么查询QStylesheetStyle呢?
  • @KcFnMi 我为我的答案添加了进一步的解释。 TL;DR:不可能。
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 2014-01-21
  • 2021-11-18
  • 2017-12-27
  • 1970-01-01
  • 2020-02-16
  • 2015-07-12
  • 1970-01-01
相关资源
最近更新 更多